# -*- coding: iso-8859-1 -*-
#
#-------------------------------------------------------------------------------
# Code_Saturne version 1.3
# ------------------------
#
#
# This file is part of the Code_Saturne User Interface, element of the
# Code_Saturne CFD tool.
#
# Copyright (C) 1998-2007 EDF S.A., France
#
# contact: saturne-support@edf.fr
#
# The Code_Saturne User Interface is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# The Code_Saturne User Interface is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the Code_Saturne Kernel; if not, write to the
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA
#
#-------------------------------------------------------------------------------
"""
This module defines the 'Start/Restart' page.
This module defines the following classes:
- StartRestartModel
- HistoFilesDialog
- AdvancedOptionsDialog
- StartRestartView
- PageText
- StartRestartTestCase
"""
#-------------------------------------------------------------------------------
# Library modules import
#-------------------------------------------------------------------------------
import os, sys, string, types
import Tix
from Tkconstants import *
import tkFileDialog, tkMessageBox
import unittest
#-------------------------------------------------------------------------------
# Application modules import
#-------------------------------------------------------------------------------
from Base.Common import *
import Base.Toolbox as Tool
import Base.Dialog as Dialog
import Base.TkPage as TkPage
#-------------------------------------------------------------------------------
# Start-Restart model class
#-------------------------------------------------------------------------------
class StartRestartModel:
"""
Manage the input/output markups in the xml doc about Start and Restart
"""
def __init__(self, case):
"""
Constuctor.
"""
self.case = case
self.node_magt = self.case.xmlInitNode('calcul_management')
self.node_start = self.node_magt.xmlInitNode('start_restart')
self.node_restart = self.node_start.xmlInitNode('restart', 'status')
def defaultStartRestartValues(self):
"""
Return in a dictionnary which contains default values
"""
default = {}
default['restart'] = "off"
default['restart_with_auxiliary'] = "on"
default['main_restart'] = "binary"
default['auxiliary_restart'] = "binary"
default['restart_rescue'] = 0
default['frozen_field'] = "off"
return default
def mUpdateHistoryRestartFiles(self, dir):
"""
"""
previous = self.node_start.xmlGetString('current_restart')
if previous:
self.node_start.xmlSetData('restart_history', previous)
self.node_start.xmlRemoveChild('current_restart')
self.node_start.xmlSetData('current_restart', os.path.basename(dir))
def mGetCurRest(self, event=None):
return self.node_start.xmlGetStringList('current_restart')
def mGetString(self, key):
return self.node_start.xmlGetStringList(key)
def mSetStartRestart(self, var):
self.node_restart['status'] = var
def mSetRestartKey(self, key, var):
self.node_start.xmlSetData(key, var)
def removeCurrentRestart(self):
self.node_start.xmlRemoveChild('current_restart')
def mGetRestart(self):
"""
Return if this calcul is restarting with a restart file
"""
restart = self.node_restart['status']
if restart not in ("on", "off"):
# print self.defaultStartRestartValues['restart']
restart = self.defaultStartRestartValues()['restart']
self.mSetRestart(restart)
return restart
def mSetRestart(self, v):
"""
Set if the velocity and the pressure are solved
"""
# node = self.node_start.xmlInitNode('restart', 'status')
self.node_restart['status'] = v
def mGetFrozenField(self):
"""
Return if the velocity and the pressure are solved
"""
node = self.node_start.xmlGetNode('frozen_field', 'status')
if not node or node['status'] not in ("on", "off"):
v = self.defaultStartRestartValues()['frozen_field']
self.setFrozenField(v)
node = self.node_start.xmlGetNode('frozen_field')
return node['status']
def mSetFrozenField(self, v):
"""
"""
node = self.node_start.xmlInitNode('frozen_field', 'status')
node['status'] = v
def mGetRestartOptions(self, default):
"""
Set if the velocity and the pressure are solved
"""
v = self.node_restart['status']
if v: default['restart'] = v
node1 = self.node_start.xmlInitNode('restart_with_auxiliary', 'status')
v = node1['status']
if v: default['restart_with_auxiliary'] = v
v = self.node_start.xmlGetInt('restart_rescue')
if not v or v == 0:
default['restart_rescue'] = 0
default['period_rescue'] = "4 output"
else:
if v == -1:
default['restart_rescue'] = -1
default['period_rescue'] = "At the end"
else:
default['restart_rescue'] = v
default['period_rescue'] = "Frequency"
node2 = self.node_start.xmlInitNode('main_restart', 'format')
v = node2['format']
if v: default['main_restart'] = v
node3 = self.node_start.xmlInitNode('auxiliary_restart', 'format')
v = node3['format']
if v: default['auxiliary_restart'] = v
def mSetRestartOptions(self, select):
"""
"""
node1 = self.node_start.xmlInitNode('restart_with_auxiliary', 'status')
node2 = self.node_start.xmlInitNode('main_restart', 'format')
node3 = self.node_start.xmlInitNode('auxiliary_restart', 'format')
node1['status'] = select['restart_with_auxiliary']
node2['format'] = select['main_restart']
node3['format'] = select['auxiliary_restart']
self.node_start.xmlSetData('restart_rescue', select['restart_rescue'])
#-------------------------------------------------------------------------------
# Popup Window : restart files history
#-------------------------------------------------------------------------------
class HistoFilesDialog(Dialog.Dialog):
"""
Building of popup window for list of restart files.
"""
def body(self, master):
"""
Creation of popup window's widgets for one list of files
"""
t = PageText()
# Variables declaration and initialization
# Window for listing
wlist = Tix.LabelFrame(master, label=t.HISTO, bd=2)
wlist.label.config(font=fT)
wlist.pack(side=TOP, expand=YES, padx=10, pady=20)
self.l = Tix.ScrolledListBox(wlist.frame,
scrollbar='auto',
width=150, height=200)
self.l.pack(side=TOP, expand=YES, padx=10, pady=10)
if self.default:
for dir in self.default:
self.l.listbox.insert(END, dir)
def buttonbox(self):
"""
Override standard button box.
"""
t = PageText()
#Separator
Tix.Frame(self, height=2, bd=2, relief=SUNKEN).pack(side=TOP, fill =X)
#Quit button
box = Tix.Frame(self, relief=FLAT)
box.pack()
b = Tix.Button(box, text=t.CLOSE, underline=0, width=10,
command=self.cancel, default=ACTIVE)
b.pack(side=TOP, padx=10, pady=10)
#--------------------------------------------------------------------------------
# Popup Window : Advanced options
#--------------------------------------------------------------------------------
class AdvancedOptionsDialog(Dialog.Dialog):
"""
Building of popup window for advanced options.
"""
def getFreq(self, event=None):
"""
Creation of popup window's widgets
"""
self.stbar.busy()
period = self.freq.get()
if period == "At the end":
nsuit = -1
self.result['restart_rescue'] = nsuit
self.nsuit.set(nsuit)
self.frre.config(state=DISABLED, bg='grey')
if period == "4 output":
nsuit = 0
self.result['restart_rescue'] = nsuit
self.nsuit.set(nsuit)
self.frre.config(state=DISABLED, bg='grey')
if period == "Frequency":
self.frre.config(state=NORMAL, bg='white')
if self.result['restart_rescue'] <= 0:
nsuit = 1
self.nsuit.set(nsuit)
if self.check2.isSPositive(self.frre, self.nsuit):
self.result['restart_rescue'] = self.nsuit.get()
self.stbar.idle()
def body(self, master):
"""
Creation of popup window's widgets
"""
t = PageText()
# Variables declaration and initialization
self.readauxfile = Tix.StringVar()
self.freq = Tix.StringVar()
self.nsuit = Tix.IntVar()
self.mnformat = Tix.StringVar()
self.auxformat = Tix.StringVar()
self.result=self.default.copy()
fw = [0]*2
l = [0]*2
self.mff = [0]*2
# Read of auxiliary file if analysis start is asked
if self.default['restart'] == "on":
self.pw1 = Tix.Frame(master, width=150, relief=GROOVE, bd=2)
self.pw1.pack(side=TOP, fill=X, padx=20, pady=15)
rafl = Tix.Label(self.pw1, text=t.READ_AUX_FILE, font=fT, justify=LEFT)
rafl.grid(row=0, column=0, padx=5, pady=10, sticky=W)
self.balloon.bind_widget(rafl, balloonmsg=t.KEYWORD+"ILEAUX")
self.rafb = Tix.Checkbutton(self.pw1, onvalue='on', offvalue='off',
variable=self.readauxfile)
self.rafb.grid(row=0, column=1, padx=5)
self.balloon.bind_widget(self.rafb, balloonmsg=t.KEYWORD+"ILEAUX")
if self.default['restart_with_auxiliary'] == 'on':
self.rafb.select()
else :
self.rafb.deselect()
# Frequency of rescue of restart file
pw3 = Tix.LabelFrame(master, width=150,
label=t.FREQ_RESC_RFILE, relief=FLAT, bd=2)
pw3.label.config(font=fT, justify=LEFT)
pw3.pack(side=TOP, fill=X, padx=20, pady=10)
fpw3 = Tix.Frame(pw3.frame)
fpw3.pack(side=TOP, fill=X, pady=5)
self.frrb = Tix.OptionMenu(fpw3)
self.frrb.menubutton.config(width=25, bd=2, relief=RAISED)
self.frrb.grid(row=0, column=0, padx=5, pady=10, sticky=W)
self.frrb.add_command('At the end', label=t.ATHEND)
self.frrb.add_command('4 output', label=t.FOUROUT)
self.frrb.add_command('Frequency', label=t.FREQ)
self.frrb.config(variable=self.freq, command=self.getFreq)
self.balloon.bind_widget(self.frrb, balloonmsg=t.KEYWORD+'NSUIT')
self.frre = Tix.Entry(fpw3, width=6, textvariable=self.nsuit)
self.frre.grid(row=0, column=1, padx=5, pady=10, sticky=E)
self.frre.event_add("<<Event>>", "<Return>", "<Leave>", "<FocusOut>")
self.frre.bind("<<Event>>", self.getFreq)
self.nsuit.set(self.default['restart_rescue'])
self.balloon.bind_widget(self.frre, balloonmsg=t.KEYWORD+'NSUIT')
if self.default['restart_rescue'] == -1:
self.nsuit.set(-1)
self.frre.config(state=DISABLED, bg='grey')
self.frrb.config(value='At the end')
elif self.default['restart_rescue'] == 0:
self.nsuit.set(0)
self.frre.config(state=DISABLED, bg='grey')
self.frrb.config(value='4 output')
else:
self.frrb.config(value='Frequency')
self.frre.config(state=NORMAL,bg='white')
self.nsuit.set(self.default['restart_rescue'])
# Written format of files at the end of the calculation
pw2 = Tix.LabelFrame(master, width=150,
label=t.FORMAT, relief=FLAT, bd=2)
pw2.label.config(font=fT, justify=LEFT)
pw2.pack(side=TOP, fill=X, padx=20, pady=10)
for n, lab, bout, var, kw in \
[ (0, t.MAIN_FILE, 'main_restart', self.mnformat, "IFOAVA"),
(1, t.AUX_FILE, 'auxiliary_restart', self.auxformat, "IFOAVX") ]:
fw[n] = Tix.Frame(pw2.frame)
fw[n].pack(side=TOP, fill=X, padx=15, pady=5)
self.mff[n] = Tix.Select(fw[n],
label=lab, labelside=LEFT,
allowzero=0, radio=1)
self.mff[n].label.config(width=20)
self.mff[n].add('binary', text=t.BINARY, width=6)
self.mff[n].add('ascii', text=t.ASCII, width=6)
self.mff[n].pack(side=LEFT, padx=5, pady=5)
self.balloon.bind_widget(self.mff[n].label, balloonmsg=t.KEYWORD+kw)
# value by default
#
if self.default[bout] == 'ascii':
self.mff[n].ascii.invoke()
var.set('ascii')
else:
self.mff[n].binary.invoke()
var.set('binary')
self.mff[n].config(variable=var)
def apply(self):
"""
What to do when user clicks on 'OK'.
"""
if self.default['restart'] == 'on':
self.result['restart_with_auxiliary'] = self.readauxfile.get()
self.result['restart_rescue'] = self.nsuit.get()
self.result['period_rescue'] = self.freq.get()
if self.mnformat.get() == "('binary',)" or self.mnformat.get() == "binary":
string = "binary"
else:
string = "ascii"
self.result['main_restart'] = string
if self.auxformat.get() == "('binary',)" or self.auxformat.get() == "binary":
string = "binary"
else:
string = "ascii"
self.result['auxiliary_restart'] = string
#self.result['main_restart'] = self.mnformat.get()
#self.result['auxiliary_restart'] = self.auxformat.get()
#-------------------------------------------------------------------------------
# Main class
#-------------------------------------------------------------------------------
class StartRestartView(TkPage.Page):
"""
This page is devoted to the start/restart control.
"""
def _tkControlVariables(self):
"""
Tkinter variables declaration.
"""
self.case_path = Tix.StringVar()
self.yes_no = Tix.StringVar()
self.results_format = Tix.StringVar()
self.restart_format = Tix.StringVar()
self.frozenfield = Tix.StringVar()
def _pageControl(self):
"""
Xml node declaration and supplementary default value settings.
"""
self.model = StartRestartModel(self.case)
def getCurrent(self, lfile, dir_name, event=None):
"""
Xml up to date between current and previous restart_history.
"""
t = PageText()
self.stbar.busy()
exist_name = os.readlink(lfile)
if dir_name != exist_name :
ans = Dialog.askyesno(self.master, title=t.WARNING,
image='question.gif',
text=t.AVERT + exist_name +'\n\n' + t.ERASE1 +'\n\n'+t.ERASE2)
if ans == 'yes':
os.unlink(lfile)
os.symlink(os.path.abspath(dir_name),lfile)
self.model.mUpdateHistoryRestartFiles(dir_name)
self.stbar.idle()
def searchDir(self, event=None):
"""
Search restart file (directory) in list of directories
"""
t = PageText()
self.stbar.busy()
dir_name = Dialog.dirselect(self.master,
stbar=self.stbar,
title=t.SEARCH_TITLE,
default=self.case['case_path']+'/RESU')
if dir_name:
rpath = os.path.split(os.path.abspath(dir_name))[0]
rpath2 = os.path.split(rpath)[0]
#lfile = os.path.split(rpath2)[0]+'/DATA/SUITE'
lfile = self.case['case_path']+'/DATA/SUITE'
try:
os.symlink(os.path.abspath(dir_name), lfile)
self.model.mUpdateHistoryRestartFiles(dir_name)
except:
self.getCurrent(lfile, dir_name)
try:
name = os.path.basename(dir_name)
if name:
self.model.mSetRestartKey('current_restart', name)
self.nameDir2.config(text=name, font=fB)
self.nameDir1.grid(row=1, column = 1)
self.nameDir2.grid(row=1, column = 2, columnspan=5)
except:
pass
self.stbar.idle()
def getHisto(self, event=None):
"""
List of restart files
"""
self.stbar.busy()
t=PageText()
default = []
cur_rst = self.model.mGetCurRest()
prev_rst = self.model.mGetRestHist()
if cur_rst and cur_rst[0]:
default.append(cur_rst[0])
if prev_rst:
for dir in prev_rst:
default.append(dir)
dialog = HistoFilesDialog(self.master, title=t.HIS,
stbar=self.stbar,
default=default)
self.stbar.idle()
def getRestart(self, event=None):
"""
Input ISUITE Code_Saturne keyword.
"""
self.stbar.busy()
self.model.mSetStartRestart(self.yes_no.get())
self.s1.pack_forget()
self.w2.pack_forget()
self.s2.pack_forget()
self.w3.pack_forget()
self.nameDir1.grid_forget()
self.nameDir2.grid_forget()
if self.yes_no.get() == "off":
self.fil.configure(state=DISABLED)
#self.his.configure(state=DISABLED)
self.s2.pack(side=TOP, fill=X)
self.w3.pack(side=TOP, fill = X, padx=10)
self.model.mSetFrozenField("off")
self.frozenfield.set("off")
self.r[1].select()
else:
self.fil.configure(state=NORMAL)
#self.his.configure(state=NORMAL)
self.s1.pack(side=TOP, fill=X)
self.w2.pack(side=TOP, fill = X, padx=10, pady=10)
self.s2.pack(side=TOP, fill=X)
self.w3.pack(side=TOP, fill = X, padx=10)
self.r[0].select()
name = self.model.mGetString('current_restart')
if name:
self.nameDir1.grid(row=1, column = 1)
self.nameDir2.grid(row=1, column = 2, columnspan=5)
self.stbar.idle()
def getFrozenField(self, event=None):
"""
Input if calculation on frozen velocity and pressure fields or not
"""
self.stbar.busy()
self.model.mSetFrozenField(self.frozenfield.get())
self.stbar.idle()
def getAdvancedOptions(self, event=None):
"""
Ask one popup for advanced specifications
"""
t=PageText()
self.stbar.busy()
default = {}
default['restart'] = "off"
default['restart_with_auxiliary'] = "on"
default['period_rescue'] = "4 output"
default['restart_rescue'] = 0
default['main_restart'] = "binary"
default['auxiliary_restart'] = "binary"
self.model.mGetRestartOptions(default)
dialog = AdvancedOptionsDialog(self.master, title=t.OPTIONS,
stbar=self.stbar, default=default)
select = dialog.result
self.model.mSetRestartOptions(select)
self.stbar.idle()
def _createWidgets(self):
"""
Make widgets and the layout for restart management.
"""
t = PageText()
lf1 = Tix.LabelFrame(self.myPage, bd=2, label=t.RESTART_TITLE, relief=FLAT)
lf1.label.config(font=fT)
lf1.pack(side=TOP, fill=X, padx=10, pady=10)
w1 = Tix.Frame(lf1.frame,relief=FLAT)
w1.pack(side=TOP)
l = Tix.Label(w1, text=t.RESTART)
self.balloon.bind_widget(l, balloonmsg=t.KEYWORD+"ISUITE")
l.grid(row=0, column=0, padx=5, pady=10, sticky=W)
self.r = [0]*2
for (i, tx1, tx2) in [(0, t.YES, "on"),
(1, t.NO, "off")]:
self.r[i] = Tix.Radiobutton(w1, text=tx1, value=tx2,
variable=self.yes_no,
command=self.getRestart)
self.r[i].grid(row=0, column=i+1)
self.balloon.bind_widget(self.r[i], balloonmsg=t.KEYWORD+"ISUITE")
# name of restart directory
#
self.nameDir1 = Tix.Label(w1, text='SUITE: ', font=fB)
self.nameDir2 = Tix.Label(w1)
# research of restart file in list of files
#
self.img = Tix.PhotoImage(file=PIC_PATH+'search1.gif')
self.fil = Tix.Button(w1, image=self.img, command=self.searchDir)
self.fil.grid(row=0, column=5, sticky=E, padx=10, pady=5)
self.balloon.bind_widget(self.fil, balloonmsg=t.MSG_SEARCH)
#self.iml = Tix.PhotoImage(file=PIC_PATH+'file_cab.gif')
#self.his = Tix.Button(w1, image=self.iml,command=self.getHisto)
#self.his.grid(row=0, column=6, sticky=E, padx=10, pady=5)
#self.balloon.bind_widget(self.his, balloonmsg=t.MSG_HIS)
# Separator
#
self.s1 = Tix.Frame(lf1.frame, height=2, bd=2, relief=SUNKEN)
self.s1.pack(side=TOP, fill=X)
# Analysis on frozen velocity and pressure fields
#
self.w2 = Tix.Frame(lf1.frame, relief=FLAT)
self.w2.pack(side=TOP, fill = X, padx=10, pady=10)
labfrf = Tix.Label(self.w2, text=t.FROZEN_FIELDS)
labfrf.grid(row=0, column=0, padx=5, pady=10, sticky=W)
self.balloon.bind_widget(labfrf, balloonmsg=t.KEYWORD+"ICCVFG")
self.frf = Tix.Checkbutton(self.w2, onvalue='on', offvalue='off',
variable=self.frozenfield,
command=self.getFrozenField)
self.frf.grid(row=0, column=1, padx=5, sticky=E)
# Separator
#
self.s2 = Tix.Frame(lf1.frame, height=2, bd=2, relief=SUNKEN)
self.s2.pack(side=TOP, fill=X)
# Advanced options
#
self.w3 = Tix.Frame(lf1.frame, relief=FLAT)
self.w3.pack(side=TOP, fill = X, padx=10)
self.lop = Tix.Label(self.w3, text=t.OPTIONS)
self.lop.grid(row=0, column=0, padx=5, pady=5, sticky=W)
self.imsop = Tix.PhotoImage(file=PIC_PATH+'graduate.gif')
sop = Tix.Button(self.w3, image=self.imsop,
command=self.getAdvancedOptions)
sop.grid(row=0, column=1, padx=5, pady=5, sticky=E)
#self.balloon.bind_widget(sop, balloonmsg=t.POPUP)
def _initializeWidgets(self):
"""
Extract resquested informations from XML document.
This informations are used to initialize the widgets.
"""
name = self.case['currentPage']
if self.case[name]['num_entry'] == 1:
fil_cur = self.model.mGetString('current_restart')
data = self.case['case_path'] +'/DATA'
if 'SUITE' in os.listdir(data):
try:
dir = os.readlink(data +'/SUITE')
except:
dir = data +'/SUITE'
if not os.path.isdir(dir):
Dialog.Warning(self.master, title=t.WARNING, text=t.MSG_NOT_DIR)
# self.model.mSetRestartKey('current_restart',
# os.path.basename(dir))
#
# ne fonctionne pas pour l'instant
# if fil_cur and fil_cur != dir:
# self.model.mSetRestartKey('restart_history', fil_cur)
else:
if fil_cur:
self.model.removeCurrentRestart()
self.model.mSetRestartKey('restart_history', fil_cur)
name = self.model.mGetString('current_restart')
if name: self.nameDir2.config(text=name[0], font=fB)
if self.model.mGetRestart() == "on":
self.r[0].select()
if name:
self.nameDir1.grid(row=1, column = 1)
self.nameDir2.grid(row=1, column = 2, columnspan=5)
else:
self.r[1].select()
self.getRestart()
if name:
self.nameDir1.grid_forget()
self.nameDir2.grid_forget()
self.frozenfield.set(self.model.mGetFrozenField())
#-------------------------------------------------------------------------------
# Text and messages for this page
#-------------------------------------------------------------------------------
class PageText:
"""
Storage of all texts and messages for this page.
"""
def __init__(self):
# 1) Texts
#
if Tool.GuiParam.lang == 'fr':
self.ASCII = "Ascii"
self.ATHEND = "Sauvegarde à la fin du calcul"
self.BINARY = "Binaire"
self.CLOSE = "Quitter"
self.KEYWORD = "Mot clé Code_Saturne : "
self.NO = "non"
self.FOUROUT = "4 sauvegardes"
self.FREQ = "Fréquence de sauvegarde :"
self.FREQ_RESC_RFILE= "Période de sauvegarde du fichier suite"
self.FROZEN_FIELDS = "Calcul sur champs de vitesse et de pression figés"
self.RESTART = "Suite de calcul : "
self.RESTART_FORMAT = "Format du fichier suite : "
self.RESTART_TITLE = "Gestion des suites"
self.RESU_FORMAT = "Format du fichier résultats :"
self.YES = "oui"
self.OPTIONS = "Options avancées"
self.READ_AUX_FILE = "Lecture du fichier suite auxilliaire\nen début de calcul"
self.FORMAT = "Format d'écriture des fichiers\nsuite en fin de calcul"
self.MAIN_FILE = "Fichiers principaux"
self.AUX_FILE = "Fichiers auxiliaires"
self.HIS = "Répertoires SUITE"
self.HISTO = "Historique des répertoires\nSUITE utilisés"
self.SEARCH_TITLE = "Sélection du répertoire suite"
self.WARNING = "ATTENTION"
else:
self.ASCII = "Ascii"
self.ATHEND = "Save at the end of calculation"
self.BINARY = "Binary"
self.CLOSE = "Quit"
self.KEYWORD = "Code_Saturne key word: "
self.NO = "off"
self.FOUROUT = "4 rescue files"
self.FREQ = "Save at frequency :"
self.FREQ_RESC_RFILE= "Frequency of rescue restart file"
self.FROZEN_FIELDS = "Calculation on frozen velocity and pressure fields"
self.RESTART = "Analysis restart:"
self.RESTART_FORMAT = "Restart file format: "
self.RESTART_TITLE = "Start/Restart"
self.RESU_FORMAT = "Results file format:"
self.YES = "on"
self.OPTIONS = "Advanced options"
self.READ_AUX_FILE = "Read the auxiliary restart file\nat the begin of the analysis"
self.FORMAT = "Output restart files format\nat the end of the anaylsis"
self.MAIN_FILE = "Main files"
self.AUX_FILE = "Auxiliary files"
self.HIS = "SUITE directories"
self.HISTO = "Restart SUITE directories's\nhistory"
self.SEARCH_TITLE = "Selection of the restart directory SUITE"
self.WARNING = "WARNING"
# 2) Messages
#
if Tool.GuiParam.lang == 'fr':
self.AVERT = "Le lien symbolique suivant existe déjà dans le "\
"répertoire DATA :\n\n"
self.ERASE1 = "Ce lien sera détruit au profit du nouveau "\
"lien que vous venez de demander."
self.ERASE2 = "Voulez vous vraiment détruire le lien existant ?"
self.MSG_FREQ = "Attention : ce nombre n'est pas cohérent avec ce que vous avez demandé"
self.MSG_HIS = "Historique des répertoires suite sélectionnés"
self.MSG_SEARCH = "Sélection du répertoire suite et création d'un\n"\
"lien symbolique dans le répertoire DATA"
self.MSG_NOT_DIR = "Le répertoire SUITE n'exite pas !"
else:
self.AVERT = "The following symbolic link is already in DATA "\
"repertory:\n\n"
self.ERASE1 = "This link will be replaced by the asked new link. "
self.ERASE2 = "Do you want really erase the existing link ?"
self.MSG_FREQ = "Warning : this number isn't coherent with what you asked"
self.MSG_HIS = "History of selected restart directories"
self.MSG_SEARCH = "Selection of the restart directory and\n"\
"creation of the symbolic link in the DATA "\
"directory"
self.MSG_NOT_DIR = "The directory 'SUITE' does not exist!"
#-------------------------------------------------------------------------------
# StartRestartModel test case
#-------------------------------------------------------------------------------
class StartRestartTestCase(unittest.TestCase):
"""
"""
def setUp(self):
"""
This method is executed before all "check" methods.
"""
from Base.XMLengine import Case, XMLDocument
from Base.XMLinitialize import XMLinit
Tool.GuiParam.lang = 'en'
self.case = Case()
XMLinit(self.case)
self.doc = XMLDocument()
def tearDown(self):
"""
This method is executed after all "check" methods.
"""
del self.case
del self.doc
def checkStartRestartInstantiation(self):
"""
Check whether the StartRestartModel class could be instantiated
"""
model = None
model = StartRestartModel(self.case)
assert model != None, 'Could not instantiate StartRestartModel'
def checkUpdateHistoryRestartFiles(self):
"""
Check whether the updateHistoryRestartFiles method could be set
"""
model = StartRestartModel(self.case)
truc = model.node_start.toString()
doc= '<start_restart>'\
'<restart status=""/>'\
'</start_restart>'
assert truc == doc, 'Could not uddate the history of restart files'
def checkSetRestart(self):
"""
Check whether the restart method could be set
"""
model = StartRestartModel(self.case)
model.mSetRestartKey('current_restart', 'file')
truc = model.node_start.toString()
doc= '<start_restart>'\
'<restart status=""/>'\
'<current_restart>file</current_restart>'\
'</start_restart>'
assert truc == doc, 'Could not set restart'
def checkSetFrozenStatus(self):
"""
Check whether the Frozen status method could be set
"""
model = StartRestartModel(self.case)
model.mSetFrozenField('on')
truc = model.node_start.toString()
doc= '<start_restart>'\
'<restart status=""/>'\
'<frozen_field status="on"/>'\
'</start_restart>'
assert truc == doc, 'Could not set frozen status'
def checkSetStartRestartStatus(self):
"""
Check whether the startRestart method could be set
"""
model = StartRestartModel(self.case)
model.mSetStartRestart('off')
truc = model.node_start.toString()
doc= '<start_restart>'\
'<restart status="off"/>'\
'</start_restart>'
assert truc == doc, 'Could not set Start/Restart status'
def checkSetAuxiliaryRestartStatus(self):
"""
Check whether the Auxiliary Restart Status method could be set
"""
model = StartRestartModel(self.case)
default = {}
default['restart_with_auxiliary'] = "on"
default['restart_rescue'] = "0"
default['main_restart'] = "binary"
default['auxiliary_restart'] = "binary"
model.mSetRestartOptions(default)
truc = model.node_start.toString()
doc= '<start_restart>'\
'<restart status=""/>'\
'<restart_with_auxiliary status="on"/>'\
'<main_restart format="binary"/>'\
'<auxiliary_restart format="binary"/>'\
'<restart_rescue>0</restart_rescue>'\
'</start_restart>'
assert truc == doc, 'Could not set auxiliary restart status'
def suite():
testSuite = unittest.makeSuite(StartRestartTestCase, "check")
return testSuite
def runTest():
print "StartRestartTestCase"
runner = unittest.TextTestRunner()
runner.run(suite())
#-------------------------------------------------------------------------------
# End
#-------------------------------------------------------------------------------
syntax highlighted by Code2HTML, v. 0.9.1