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
40 class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
42 Cette classe permet de créer des objets de type PARAMETRE
43 cad des affectations directes dans le jeu de commandes (ex: a=10.)
44 qui sont interprétées par le parseur de fichiers Python.
45 Les objets ainsi créés constituent des paramètres pour le jdc
51 def __init__(self,nom,valeur=None):
53 # La classe PARAMETRE n'a pas de définition : on utilise self pour
56 # parent ne peut être qu'un objet de type JDC
57 self.jdc = self.parent = CONTEXT.get_current_step()
58 self.niveau=self.parent.niveau
60 self.state='undetermined'
63 #self.valeur = self.interprete_valeur(valeur)
68 def interprete_valeur(self,val):
70 Essaie d'interpréter val (chaîne de caractères)comme :
73 - une chaîne de caractères
74 - une liste d'items d'un type qui précède
75 Retourne la valeur interprétée
77 #if not val : return None
80 if type(val) == types.StringType:
81 # on tente l'evaluation dans un contexte fourni par le parent s'il existe
83 valeur=self.parent.eval_in_context(val,self)
88 #traceback.print_exc()
90 #PN je n ose pas modifier je rajoute
91 # refus des listes heterogenes : ne dvrait pas etre la
93 if type(valeur) == types.TupleType:
101 # la liste est hétérogène --> on refuse d'interpréter
102 # self comme une liste
103 # on retourne la string initiale
104 print 'liste hétérogène ',val
107 return tuple(l_new_val)
110 if type(valeur).__name__ == 'list':
112 for i in range(len(valeur)):
113 self.dict_valeur.append(valeur[i])
115 # on retourne val comme une string car on n'a pas su l'interpréter
118 def get_valeurs(self):
120 if self.dict_valeur != []:
121 for val in self.dict_valeur:
122 valeurretour.append(val)
124 valeurretour.append(self.valeur)
127 def set_valeur(self,new_valeur):
129 Remplace la valeur de self par new_valeur interprétée
131 self.valeur = self.interprete_valeur(new_valeur)
134 def set_nom(self,new_nom):
136 Change le nom du parametre
142 def init_modif(self):
144 Méthode qui déclare l'objet courant comme modifié et propage
145 cet état modifié à ses ascendants
147 self.state = 'modified'
149 self.parent.init_modif()
151 def get_jdc_root(self):
153 return self.parent.get_jdc_root()
159 Enregistre le paramètre dans la liste des étapes de son parent (JDC)
161 self.parent.register_parametre(self)
162 self.parent.register(self)
164 def isvalid(self,cr='non'):
166 Retourne 1 si self est valide, 0 sinon
167 Un paramètre est considéré comme valide si :
173 self.cr.fatal("Pas de nom donné au paramètre ")
176 if self.valeur == None :
178 self.cr.fatal("Le paramètre %s ne peut valoir None" % self.nom)
184 Indique si self est obligatoire ou non : retourne toujours 0
188 def isrepetable(self):
190 Indique si self est répétable ou non : retourne toujours 1
194 def liste_mc_presents(self):
199 Méthode qui supprime toutes les boucles de références afin que
200 l'objet puisse être correctement détruit par le garbage collector
209 Rend l'etape courante active.
210 Il faut ajouter le paramètre au contexte global du JDC
214 self.jdc.append_param(self)
220 Rend l'etape courante inactive
221 Il faut supprimer le paramètre du contexte global du JDC
224 self.jdc.del_param(self)
225 self.jdc.delete_concept_after_etape(self,self)
229 Booléenne qui retourne 1 si self est actif, 0 sinon
233 def set_attribut(self,nom_attr,new_valeur):
235 Remplace la valeur de self.nom_attr par new_valeur)
237 if hasattr(self,nom_attr):
238 setattr(self,nom_attr,new_valeur)
241 def supprime_sdprods(self):
243 Il faut supprimer le paramètre qui a été entré dans la liste des
246 self.jdc.delete_param(self)
248 def update_context(self,d):
250 Update le dictionnaire d avec le paramètre que produit self
256 Donne un echo de self sous la forme nom = valeur
258 if type(self.valeur) == types.StringType:
259 if self.valeur.find('\n') == -1:
260 # pas de retour chariot, on utilise repr
261 return self.nom+' = '+ repr(self.valeur)
262 elif self.valeur.find('"""') == -1:
263 # retour chariot mais pas de triple ", on formatte
264 return self.nom+' = """'+self.valeur+'"""'
266 return self.nom+' = '+ repr(self.valeur)
268 return self.nom+' = '+ str(self.valeur)
272 Retourne le nom du paramètre comme représentation de self
276 def get_sdprods(self,nom_sd):
278 Retourne les concepts produits par la commande
283 """ Génère l'objet rapport (classe CR) """
285 self.isvalid(cr='oui')
290 Retourne le nom interne associé à self
291 Ce nom n'est jamais vu par l'utilisateur dans EFICAS
295 def delete_concept(self,sd):
298 def replace_concept(self,old_sd,sd):
301 def verif_condition_bloc(self):
303 Evalue les conditions de tous les blocs fils possibles
304 (en fonction du catalogue donc de la définition) de self et
305 retourne deux listes :
306 - la première contient les noms des blocs à rajouter
307 - la seconde contient les noms des blocs à supprimer
311 def verif_condition_regles(self,liste_presents):
313 Retourne la liste des mots-clés à rajouter pour satisfaire les règles
314 en fonction de la liste des mots-clés présents
318 def verif_existence_sd(self):
321 def control_sdprods(self,d):
328 def reset_context(self):
332 if isinstance(self.valeur,Formula):
333 return self.valeur.eval()
337 def __adapt__(self,validator):
338 return validator.adapt(self.eval())
340 class COMBI_PARAMETRE :
341 def __init__(self,chainevaleur,valeur):
342 self.chainevaleur=chainevaleur
346 return self.chainevaleur
349 if self.valeur and self.chainevaleur:
352 class ITEM_PARAMETRE :
353 def __init__(self,param_pere,item=None):
354 self.param_pere = param_pere
359 return self.param_pere.nom+'['+str(self.item)+']'
367 longueur= len(self.param_pere.dict_valeur) - 1
370 if self.item > longueur :