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
33 # import de modules Eficas
34 from Noyau.N_CR import CR
38 Cette classe permet de créer des objets de type PARAMETRE
39 cad des affectations directes dans le jeu de commandes (ex: a=10.)
40 qui sont interprétées par le parseur de fichiers Python.
41 Les objets ainsi créés constituent des paramètres pour le jdc
47 def __init__(self,nom,valeur=None):
48 # parent ne peut être qu'un objet de type JDC
50 self.valeur = self.interprete_valeur(valeur)
53 # La classe PARAMETRE n'a pas de définition : on utilise self pour
56 self.jdc = self.parent = CONTEXT.get_current_step()
57 self.niveau=self.parent.niveau
59 self.state='undetermined'
62 def __getitem__(self,key):
63 param_item=ITEM_PARAMETRE(self,key)
70 print "******* Probleme : pas de valeur négative"
75 return self.valeur+a.valeur
77 print "******* Probleme : a l addition"
82 return self.valeur+a.valeur
84 print "******* Probleme : a l addition"
89 return self.valeur - a.valeur
91 print "******* Probleme : a la soustraction"
96 return a.valeur - self.valeur
98 print "******* Probleme : a la soustraction"
103 return self.valeur*a.valeur
105 print "******* Probleme : a la multiplication"
108 def __rmul__(self,a):
110 return self.valeur*a.valeur
112 print "******* Probleme : a la multiplication"
117 return self.valeur*a.valeur
119 print "******* Probleme : a la multiplication"
122 def __rmul__(self,a):
124 return self.valeur*a.valeur
126 print "******* Probleme : a la multiplication"
129 def __add__(self,other):
131 return self.valeur+other
133 print "******* Probleme : a l addition"
136 def __radd__(self,other):
138 return self.valeur+other
140 print "******* Probleme : a l addition"
143 def __sub__(self,other):
145 return self.valeur - other
147 print "******* Probleme : a la soustraction"
150 def __rsub__(self,other):
152 return other - self.valeur
154 print "******* Probleme : a la soustraction"
157 def __mul__ (self,other):
160 retour = eval(self.valeur) * other
163 retour = self.valeur * other
165 print "******* Probleme : a la multiplication"
168 def __rmul__ (self,other):
171 retour = eval(self.valeur) * other
174 retour = self.valeur * other
176 print "******* Probleme : a la multiplication"
180 def interprete_valeur(self,val):
182 Essaie d'interpréter val (chaîne de caractères)comme :
185 - une chaîne de caractères
186 - une liste d'items d'un type qui précède
187 Retourne la valeur interprétée
189 if not val : return None
191 # on vérifie si val est un entier
193 valeur = string.atoi(val) # on a un entier
197 # on vérifie si val est un réel
199 valeur = string.atof(val) # on a un réel
203 # on vérifie si val est un tuple
208 #PN je n ose pas modifier je rajoute
210 if type(valeur) == types.TupleType:
218 # la liste est hétérogène --> on refuse d'interpréter
219 # self comme une liste
220 # on retourne la string initiale
221 print 'liste hétérogène ',val
224 return tuple(l_new_val)
225 # PN : commente le print
227 # on a réussi à évaluer val en autre chose qu'un tuple ...
228 #print "on a réussi à évaluer %s en autre chose qu'un tuple ..." %val
229 #print 'on trouve : ',str(valeur),' de type : ',type(valeur)
230 # on retourne val comme une string car on n'a pas su l'interpréter
232 if type(valeur).__name__ == 'list':
234 for i in range(len(valeur)):
235 self.dict_valeur.append(valeur[i])
238 def get_valeurs(self):
240 if self.dict_valeur != []:
241 for val in self.dict_valeur:
242 valeurretour.append(val)
244 valeurretour.append(self.valeur)
247 def set_valeur(self,new_valeur):
249 Remplace la valeur de self par new_valeur interprétée
251 self.valeur = self.interprete_valeur(new_valeur)
254 def init_modif(self):
256 Méthode qui déclare l'objet courant comme modifié et propage
257 cet état modifié à ses ascendants
259 self.state = 'modified'
261 self.parent.init_modif()
265 Enregistre le paramètre dans la liste des étapes de son parent (JDC)
267 self.parent.register_parametre(self)
268 self.parent.register(self)
270 def isvalid(self,cr='non'):
272 Retourne 1 si self est valide, 0 sinon
273 Un paramètre est considéré comme valide si :
279 self.cr.fatal("Pas de nom donné au paramètre ")
282 if self.valeur == None :
284 self.cr.fatal("Le paramètre %s ne peut valoir None" % self.nom)
290 Indique si self est obligatoire ou non : retourne toujours 0
294 def isrepetable(self):
296 Indique si self est répétable ou non : retourne toujours 1
300 def liste_mc_presents(self):
305 Méthode qui supprime toutes les boucles de références afin que
306 l'objet puisse être correctement détruit par le garbage collector
314 Rend l'etape courante active.
315 Il faut ajouter le paramètre au contexte global du JDC
319 self.jdc.append_param(self)
325 Rend l'etape courante inactive
326 Il faut supprimer le paramètre du contexte global du JDC
329 self.jdc.del_param(self)
330 self.jdc.delete_concept_after_etape(self,self)
334 Booléenne qui retourne 1 si self est actif, 0 sinon
338 def set_attribut(self,nom_attr,new_valeur):
340 Remplace la valeur de self.nom_attr par new_valeur)
342 if hasattr(self,nom_attr):
343 setattr(self,nom_attr,new_valeur)
346 def supprime_sdprods(self):
348 Il faut supprimer le paramètre qui a été entré dans la liste des
351 self.jdc.delete_param(self)
353 def update_context(self,d):
355 Update le dictionnaire d avec le paramètre que produit self
361 Donne un echo de self sous la forme nom = valeur
363 return self.nom+' = '+str(self.valeur)
367 Retourne le nom du paramètre comme représentation de self
371 def get_sdprods(self,nom_sd):
373 Retourne les concepts produits par la commande
378 """ Génère l'objet rapport (classe CR) """
380 self.isvalid(cr='oui')
385 Retourne le nom interne associé à self
386 Ce nom n'est jamais vu par l'utilisateur dans EFICAS
390 def delete_concept(self,sd):
393 def replace_concept(self,old_sd,sd):
396 def verif_condition_bloc(self):
398 Evalue les conditions de tous les blocs fils possibles
399 (en fonction du catalogue donc de la définition) de self et
400 retourne deux listes :
401 - la première contient les noms des blocs à rajouter
402 - la seconde contient les noms des blocs à supprimer
406 def verif_condition_regles(self,liste_presents):
408 Retourne la liste des mots-clés à rajouter pour satisfaire les règles
409 en fonction de la liste des mots-clés présents
413 def verif_existence_sd(self):
416 def control_sdprods(self,d):
422 class ITEM_PARAMETRE :
423 def __init__(self,param_pere,item=None):
424 self.param_pere = param_pere
429 return self.param_pere.nom+'['+str(self.item)+']'
437 longueur= len(self.param_pere.dict_valeur) - 1
440 if self.item > longueur :