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
38 class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
40 Cette classe permet de créer des objets de type PARAMETRE
41 cad des affectations directes dans le jeu de commandes (ex: a=10.)
42 qui sont interprétées par le parseur de fichiers Python.
43 Les objets ainsi créés constituent des paramètres pour le jdc
49 def __init__(self,nom,valeur=None):
50 # parent ne peut être qu'un objet de type JDC
52 self.valeur = self.interprete_valeur(valeur)
55 # La classe PARAMETRE n'a pas de définition : on utilise self pour
58 self.jdc = self.parent = CONTEXT.get_current_step()
59 self.niveau=self.parent.niveau
61 self.state='undetermined'
64 def __getitem__(self,key):
65 param_item=ITEM_PARAMETRE(self,key)
72 print "******* Probleme : pas de valeur négative"
77 return self.valeur+a.valeur
79 print "******* Probleme : a l addition"
84 return self.valeur+a.valeur
86 print "******* Probleme : a l addition"
91 return self.valeur - a.valeur
93 print "******* Probleme : a la soustraction"
98 return a.valeur - self.valeur
100 print "******* Probleme : a la soustraction"
106 return self.valeur*a.valeur
108 print "******* Probleme : a la multiplication"
111 def __rmul__(self,a):
113 return self.valeur*a.valeur
115 print "******* Probleme : a la multiplication"
118 def __add__(self,other):
120 return self.valeur+other
122 print "******* Probleme : a l addition"
125 def __radd__(self,other):
127 return self.valeur+other
129 print "******* Probleme : a l addition"
132 def __sub__(self,other):
134 return self.valeur - other
136 print "******* Probleme : a la soustraction"
139 def __rsub__(self,other):
141 return other - self.valeur
143 print "******* Probleme : a la soustraction"
146 def __mul__ (self,other):
149 retour = eval(self.valeur) * other
152 retour = self.valeur * other
155 retour = eval(self.valeur) * eval(other)
158 retour = self.valeur * eval(other)
161 print "******* Probleme : a la multiplication _mul__"
164 def __rmul__ (self,other):
167 retour = eval(self.valeur) * other
170 retour = self.valeur * other
173 retour = eval(self.valeur) * eval(other)
175 print "******* Probleme : a la multiplication __rmul__"
179 def __div__(self,other):
182 retour = eval(self.valeur) / other
185 retour = self.valeur / other
187 print "******* Probleme : a la division"
193 retour=cos(self.valeur)
196 print "pb pour cosinus"
200 retour=sin(self.valeur)
203 print "pb pour sinus"
207 retour=tan(self.valeur)
210 print "pb pour tangente"
214 retour=log(self.valeur)
221 retour=sqrt(self.valeur)
226 def interprete_valeur(self,val):
228 Essaie d'interpréter val (chaîne de caractères)comme :
231 - une chaîne de caractères
232 - une liste d'items d'un type qui précède
233 Retourne la valeur interprétée
235 if not val : return None
237 # on vérifie si val est un entier
239 valeur = string.atoi(val) # on a un entier
243 # on vérifie si val est un réel
245 valeur = string.atof(val) # on a un réel
249 # on vérifie si val est un tuple
254 #PN je n ose pas modifier je rajoute
256 if type(valeur) == types.TupleType:
264 # la liste est hétérogène --> on refuse d'interpréter
265 # self comme une liste
266 # on retourne la string initiale
267 print 'liste hétérogène ',val
270 return tuple(l_new_val)
271 # PN : commente le print
273 # on a réussi à évaluer val en autre chose qu'un tuple ...
274 #print "on a réussi à évaluer %s en autre chose qu'un tuple ..." %val
275 #print 'on trouve : ',str(valeur),' de type : ',type(valeur)
276 # on retourne val comme une string car on n'a pas su l'interpréter
278 if type(valeur).__name__ == 'list':
280 for i in range(len(valeur)):
281 self.dict_valeur.append(valeur[i])
284 def get_valeurs(self):
286 if self.dict_valeur != []:
287 for val in self.dict_valeur:
288 valeurretour.append(val)
290 valeurretour.append(self.valeur)
293 def set_valeur(self,new_valeur):
295 Remplace la valeur de self par new_valeur interprétée
297 self.valeur = self.interprete_valeur(new_valeur)
300 def init_modif(self):
302 Méthode qui déclare l'objet courant comme modifié et propage
303 cet état modifié à ses ascendants
305 self.state = 'modified'
307 self.parent.init_modif()
309 def get_jdc_root(self):
311 return self.parent.get_jdc_root()
317 Enregistre le paramètre dans la liste des étapes de son parent (JDC)
319 self.parent.register_parametre(self)
320 self.parent.register(self)
322 def isvalid(self,cr='non'):
324 Retourne 1 si self est valide, 0 sinon
325 Un paramètre est considéré comme valide si :
331 self.cr.fatal("Pas de nom donné au paramètre ")
334 if self.valeur == None :
336 self.cr.fatal("Le paramètre %s ne peut valoir None" % self.nom)
342 Indique si self est obligatoire ou non : retourne toujours 0
346 def isrepetable(self):
348 Indique si self est répétable ou non : retourne toujours 1
352 def liste_mc_presents(self):
357 Méthode qui supprime toutes les boucles de références afin que
358 l'objet puisse être correctement détruit par le garbage collector
366 Rend l'etape courante active.
367 Il faut ajouter le paramètre au contexte global du JDC
371 self.jdc.append_param(self)
377 Rend l'etape courante inactive
378 Il faut supprimer le paramètre du contexte global du JDC
381 self.jdc.del_param(self)
382 self.jdc.delete_concept_after_etape(self,self)
386 Booléenne qui retourne 1 si self est actif, 0 sinon
390 def set_attribut(self,nom_attr,new_valeur):
392 Remplace la valeur de self.nom_attr par new_valeur)
394 if hasattr(self,nom_attr):
395 setattr(self,nom_attr,new_valeur)
398 def supprime_sdprods(self):
400 Il faut supprimer le paramètre qui a été entré dans la liste des
403 self.jdc.delete_param(self)
405 def update_context(self,d):
407 Update le dictionnaire d avec le paramètre que produit self
413 Donne un echo de self sous la forme nom = valeur
415 return self.nom+' = '+str(self.valeur)
419 Retourne le nom du paramètre comme représentation de self
423 def get_sdprods(self,nom_sd):
425 Retourne les concepts produits par la commande
430 """ Génère l'objet rapport (classe CR) """
432 self.isvalid(cr='oui')
437 Retourne le nom interne associé à self
438 Ce nom n'est jamais vu par l'utilisateur dans EFICAS
442 def delete_concept(self,sd):
445 def replace_concept(self,old_sd,sd):
448 def verif_condition_bloc(self):
450 Evalue les conditions de tous les blocs fils possibles
451 (en fonction du catalogue donc de la définition) de self et
452 retourne deux listes :
453 - la première contient les noms des blocs à rajouter
454 - la seconde contient les noms des blocs à supprimer
458 def verif_condition_regles(self,liste_presents):
460 Retourne la liste des mots-clés à rajouter pour satisfaire les règles
461 en fonction de la liste des mots-clés présents
465 def verif_existence_sd(self):
468 def control_sdprods(self,d):
475 def reset_context(self):
478 class COMBI_PARAMETRE :
479 def __init__(self,chainevaleur,valeur):
480 self.chainevaleur=chainevaleur
484 return self.chainevaleur
487 if self.valeur and self.chainevaleur:
490 class ITEM_PARAMETRE :
491 def __init__(self,param_pere,item=None):
492 self.param_pere = param_pere
497 return self.param_pere.nom+'['+str(self.item)+']'
505 longueur= len(self.param_pere.dict_valeur) - 1
508 if self.item > longueur :