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
35 from Noyau import N_OBJECT
36 from Ihm import I_OBJECT
39 class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
41 Cette classe permet de créer des objets de type PARAMETRE
42 cad des affectations directes dans le jeu de commandes (ex: a=10.)
43 qui sont interprétées par le parseur de fichiers Python.
44 Les objets ainsi créés constituent des paramètres pour le jdc
50 def __init__(self,nom,valeur=None):
51 # parent ne peut être qu'un objet de type JDC
53 self.valeur = self.interprete_valeur(valeur)
56 # La classe PARAMETRE n'a pas de définition : on utilise self pour
59 self.jdc = self.parent = CONTEXT.get_current_step()
60 self.niveau=self.parent.niveau
62 self.state='undetermined'
65 def __getitem__(self,key):
66 param_item=ITEM_PARAMETRE(self,key)
71 # return -1*self.valeur
73 # print "******* Probleme : pas de valeur négative"
76 # def __add__(self,a):
78 # return self.valeur+a.valeur
80 # print "******* Probleme : a l addition"
83 # def __radd__(self,a):
85 # return self.valeur+a.valeur
87 # print "******* Probleme : a l addition"
90 # def __sub__(self,a):
92 # return self.valeur - a.valeur
94 # print "******* Probleme : a la soustraction"
97 # def __rsub__(self,a):
99 # return a.valeur - self.valeur
101 # print "******* Probleme : a la soustraction"
105 # def __mul__(self,a):
107 # return self.valeur*a.valeur
109 # print "******* Probleme : a la multiplication"
112 # def __rmul__(self,a):
114 # return self.valeur*a.valeur
116 # print "******* Probleme : a la multiplication"
119 # def __add__(self,other):
121 # return self.valeur+other
123 # print "******* Probleme : a l addition"
126 # def __radd__(self,other):
128 # return self.valeur+other
130 # print "******* Probleme : a l addition"
133 # def __sub__(self,other):
135 # return self.valeur - other
137 # print "******* Probleme : a la soustraction"
140 # def __rsub__(self,other):
142 # return other - self.valeur
144 # print "******* Probleme : a la soustraction"
147 # def __mul__ (self,other):
150 # retour = eval(self.valeur) * other
153 # retour = self.valeur * other
156 # retour = eval(self.valeur) * eval(other)
159 # retour = self.valeur * eval(other)
162 # print "******* Probleme : a la multiplication _mul__"
165 # def __rmul__ (self,other):
168 # retour = eval(self.valeur) * other
171 # retour = self.valeur * other
174 # retour = eval(self.valeur) * eval(other)
176 # print "******* Probleme : a la multiplication __rmul__"
180 # def __div__(self,other):
183 # retour = eval(self.valeur) / other
186 # retour = self.valeur / other
188 # print "******* Probleme : a la division"
194 # retour=cos(self.valeur)
197 # print "pb pour cosinus"
201 # retour=sin(self.valeur)
204 # print "pb pour sinus"
208 # retour=tan(self.valeur)
211 # print "pb pour tangente"
215 # retour=log(self.valeur)
218 # print "pb pour log"
222 # retour=sqrt(self.valeur)
225 # print "pb pour sqrt"
227 def interprete_valeur(self,val):
229 Essaie d'interpréter val (chaîne de caractères)comme :
232 - une chaîne de caractères
233 - une liste d'items d'un type qui précède
234 Retourne la valeur interprétée
236 if not val : return None
238 # on vérifie si val est un entier
240 valeur = string.atoi(val) # on a un entier
244 # on vérifie si val est un réel
246 valeur = string.atof(val) # on a un réel
250 # on vérifie si val est un tuple
255 #PN je n ose pas modifier je rajoute
257 if type(valeur) == types.TupleType:
265 # la liste est hétérogène --> on refuse d'interpréter
266 # self comme une liste
267 # on retourne la string initiale
268 print 'liste hétérogène ',val
271 return tuple(l_new_val)
272 # PN : commente le print
274 # on a réussi à évaluer val en autre chose qu'un tuple ...
275 #print "on a réussi à évaluer %s en autre chose qu'un tuple ..." %val
276 #print 'on trouve : ',str(valeur),' de type : ',type(valeur)
277 # on retourne val comme une string car on n'a pas su l'interpréter
279 if type(valeur).__name__ == 'list':
281 for i in range(len(valeur)):
282 self.dict_valeur.append(valeur[i])
285 def get_valeurs(self):
287 if self.dict_valeur != []:
288 for val in self.dict_valeur:
289 valeurretour.append(val)
291 valeurretour.append(self.valeur)
294 def set_valeur(self,new_valeur):
296 Remplace la valeur de self par new_valeur interprétée
298 self.valeur = self.interprete_valeur(new_valeur)
301 def init_modif(self):
303 Méthode qui déclare l'objet courant comme modifié et propage
304 cet état modifié à ses ascendants
306 self.state = 'modified'
308 self.parent.init_modif()
310 def get_jdc_root(self):
312 return self.parent.get_jdc_root()
318 Enregistre le paramètre dans la liste des étapes de son parent (JDC)
320 self.parent.register_parametre(self)
321 self.parent.register(self)
323 def isvalid(self,cr='non'):
325 Retourne 1 si self est valide, 0 sinon
326 Un paramètre est considéré comme valide si :
332 self.cr.fatal("Pas de nom donné au paramètre ")
335 if self.valeur == None :
337 self.cr.fatal("Le paramètre %s ne peut valoir None" % self.nom)
343 Indique si self est obligatoire ou non : retourne toujours 0
347 def isrepetable(self):
349 Indique si self est répétable ou non : retourne toujours 1
353 def liste_mc_presents(self):
358 Méthode qui supprime toutes les boucles de références afin que
359 l'objet puisse être correctement détruit par le garbage collector
367 Rend l'etape courante active.
368 Il faut ajouter le paramètre au contexte global du JDC
372 self.jdc.append_param(self)
378 Rend l'etape courante inactive
379 Il faut supprimer le paramètre du contexte global du JDC
382 self.jdc.del_param(self)
383 self.jdc.delete_concept_after_etape(self,self)
387 Booléenne qui retourne 1 si self est actif, 0 sinon
391 def set_attribut(self,nom_attr,new_valeur):
393 Remplace la valeur de self.nom_attr par new_valeur)
395 if hasattr(self,nom_attr):
396 setattr(self,nom_attr,new_valeur)
399 def supprime_sdprods(self):
401 Il faut supprimer le paramètre qui a été entré dans la liste des
404 self.jdc.delete_param(self)
406 def update_context(self,d):
408 Update le dictionnaire d avec le paramètre que produit self
414 Donne un echo de self sous la forme nom = valeur
416 return self.nom+' = '+str(self.valeur)
420 Retourne le nom du paramètre comme représentation de self
424 def get_sdprods(self,nom_sd):
426 Retourne les concepts produits par la commande
431 """ Génère l'objet rapport (classe CR) """
433 self.isvalid(cr='oui')
438 Retourne le nom interne associé à self
439 Ce nom n'est jamais vu par l'utilisateur dans EFICAS
443 def delete_concept(self,sd):
446 def replace_concept(self,old_sd,sd):
449 def verif_condition_bloc(self):
451 Evalue les conditions de tous les blocs fils possibles
452 (en fonction du catalogue donc de la définition) de self et
453 retourne deux listes :
454 - la première contient les noms des blocs à rajouter
455 - la seconde contient les noms des blocs à supprimer
459 def verif_condition_regles(self,liste_presents):
461 Retourne la liste des mots-clés à rajouter pour satisfaire les règles
462 en fonction de la liste des mots-clés présents
466 def verif_existence_sd(self):
469 def control_sdprods(self,d):
476 def reset_context(self):
482 class COMBI_PARAMETRE :
483 def __init__(self,chainevaleur,valeur):
484 self.chainevaleur=chainevaleur
488 return self.chainevaleur
491 if self.valeur and self.chainevaleur:
494 class ITEM_PARAMETRE :
495 def __init__(self,param_pere,item=None):
496 self.param_pere = param_pere
501 return self.param_pere.nom+'['+str(self.item)+']'
509 longueur= len(self.param_pere.dict_valeur) - 1
512 if self.item > longueur :