1 # -*- coding: utf-8 -*-
2 # CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
20 # ======================================================================
22 Ce module contient la classe PARAMETRE qui sert à définir
23 des objets paramètres qui sont compréhensibles et donc affichables
25 Ces objets sont créés à partir de la modification du fichier de commandes
26 de l'utilisateur par le parseur de fichiers Python
29 # import de modules Python
34 # import de modules Eficas
35 from Noyau.N_CR import CR
36 from Noyau import N_OBJECT
37 from Ihm import I_OBJECT
39 from Ihm import CONNECTOR
41 class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
43 Cette classe permet de créer des objets de type PARAMETRE
44 cad des affectations directes dans le jeu de commandes (ex: a=10.)
45 qui sont interprétées par le parseur de fichiers Python.
46 Les objets ainsi créés constituent des paramètres pour le jdc
52 def __init__(self,nom,valeur=None):
54 # La classe PARAMETRE n'a pas de définition : on utilise self pour
57 # parent ne peut être qu'un objet de type JDC
58 self.jdc = self.parent = CONTEXT.get_current_step()
59 self.niveau=self.parent.niveau
61 self.state='undetermined'
64 #self.valeur = self.interprete_valeur(valeur)
69 def interprete_valeur(self,val):
71 Essaie d'interpréter val (chaîne de caractères)comme :
74 - une chaîne de caractères
75 - une liste d'items d'un type qui précède
76 Retourne la valeur interprétée
78 #if not val : return None
81 if type(val) == types.StringType:
82 # on tente l'evaluation dans un contexte fourni par le parent s'il existe
84 valeur=self.parent.eval_in_context(val,self)
89 #traceback.print_exc()
91 #PN je n ose pas modifier je rajoute
92 # refus des listes heterogenes : ne dvrait pas etre la
94 if type(valeur) == types.TupleType:
102 # la liste est hétérogène --> on refuse d'interpréter
103 # self comme une liste
104 # on retourne la string initiale
105 print 'liste hétérogène ',val
108 return tuple(l_new_val)
111 if type(valeur).__name__ == 'list':
113 for i in range(len(valeur)):
114 self.dict_valeur.append(valeur[i])
116 # on retourne val comme une string car on n'a pas su l'interpréter
119 def get_valeurs(self):
121 if self.dict_valeur != []:
122 for val in self.dict_valeur:
123 valeurretour.append(val)
125 valeurretour.append(self.valeur)
128 def set_valeur(self,new_valeur):
130 Remplace la valeur de self par new_valeur interprétée
132 self.valeur = self.interprete_valeur(new_valeur)
135 def set_nom(self,new_nom):
137 Change le nom du parametre
143 def init_modif(self):
145 Méthode qui déclare l'objet courant comme modifié et propage
146 cet état modifié à ses ascendants
148 self.state = 'modified'
150 self.parent.init_modif()
152 def get_jdc_root(self):
154 return self.parent.get_jdc_root()
160 Enregistre le paramètre dans la liste des étapes de son parent (JDC)
162 self.parent.register_parametre(self)
163 self.parent.register(self)
165 def isvalid(self,cr='non'):
167 Retourne 1 si self est valide, 0 sinon
168 Un paramètre est considéré comme valide si :
174 self.cr.fatal("Pas de nom donné au paramètre ")
177 if self.valeur == None :
179 self.cr.fatal("Le paramètre %s ne peut valoir None" % self.nom)
185 Indique si self est obligatoire ou non : retourne toujours 0
189 def isrepetable(self):
191 Indique si self est répétable ou non : retourne toujours 1
195 def liste_mc_presents(self):
200 Méthode qui supprime toutes les boucles de références afin que
201 l'objet puisse être correctement détruit par le garbage collector
210 Rend l'etape courante active.
211 Il faut ajouter le paramètre au contexte global du JDC
215 self.jdc.append_param(self)
218 CONNECTOR.Emit(self,"add",None)
219 CONNECTOR.Emit(self,"valid")
223 Rend l'etape courante inactive
224 Il faut supprimer le paramètre du contexte global du JDC
227 self.jdc.del_param(self)
228 self.jdc.delete_concept_after_etape(self,self)
229 CONNECTOR.Emit(self,"supp",None)
230 CONNECTOR.Emit(self,"valid")
234 Booléenne qui retourne 1 si self est actif, 0 sinon
238 def set_attribut(self,nom_attr,new_valeur):
240 Remplace la valeur de self.nom_attr par new_valeur)
242 if hasattr(self,nom_attr):
243 setattr(self,nom_attr,new_valeur)
246 def supprime_sdprods(self):
248 Il faut supprimer le paramètre qui a été entré dans la liste des
251 self.jdc.delete_param(self)
253 def update_context(self,d):
255 Update le dictionnaire d avec le paramètre que produit self
261 Donne un echo de self sous la forme nom = valeur
263 if type(self.valeur) == types.StringType:
264 if self.valeur.find('\n') == -1:
265 # pas de retour chariot, on utilise repr
266 return self.nom+' = '+ repr(self.valeur)
267 elif self.valeur.find('"""') == -1:
268 # retour chariot mais pas de triple ", on formatte
269 return self.nom+' = """'+self.valeur+'"""'
271 return self.nom+' = '+ repr(self.valeur)
273 return self.nom+' = '+ str(self.valeur)
277 Retourne le nom du paramètre comme représentation de self
281 def get_sdprods(self,nom_sd):
283 Retourne les concepts produits par la commande
288 """ Génère l'objet rapport (classe CR) """
290 self.isvalid(cr='oui')
295 Retourne le nom interne associé à self
296 Ce nom n'est jamais vu par l'utilisateur dans EFICAS
300 def delete_concept(self,sd):
303 def replace_concept(self,old_sd,sd):
306 def verif_condition_bloc(self):
308 Evalue les conditions de tous les blocs fils possibles
309 (en fonction du catalogue donc de la définition) de self et
310 retourne deux listes :
311 - la première contient les noms des blocs à rajouter
312 - la seconde contient les noms des blocs à supprimer
316 def verif_condition_regles(self,liste_presents):
318 Retourne la liste des mots-clés à rajouter pour satisfaire les règles
319 en fonction de la liste des mots-clés présents
323 def verif_existence_sd(self):
326 def control_sdprods(self,d):
333 def reset_context(self):
337 if isinstance(self.valeur,Formula):
338 return self.valeur.eval()
342 def __adapt__(self,validator):
343 return validator.adapt(self.eval())
345 class COMBI_PARAMETRE :
346 def __init__(self,chainevaleur,valeur):
347 self.chainevaleur=chainevaleur
351 return self.chainevaleur
354 if self.valeur and self.chainevaleur:
357 class ITEM_PARAMETRE :
358 def __init__(self,param_pere,item=None):
359 self.param_pere = param_pere
364 return self.param_pere.nom+'['+str(self.item)+']'
372 longueur= len(self.param_pere.dict_valeur) - 1
375 if self.item > longueur :