# -*- 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("<>", "", "", "") self.frre.bind("<>", 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= ''\ ''\ '' 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= ''\ ''\ 'file'\ '' 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= ''\ ''\ ''\ '' 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= ''\ ''\ '' 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= ''\ ''\ ''\ ''\ ''\ '0'\ '' 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 #-------------------------------------------------------------------------------