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 la multiplication"
82 return self.valeur*a.valeur
84 print "******* Probleme : a la multiplication"
87 def __mul__ (self,other):
90 retour = eval(self.valeur) * other
93 retour = self.valeur * other
95 print "******* Probleme : a la multiplication"
98 def __rmul__ (self,other):
101 retour = eval(self.valeur) * other
104 retour = self.valeur * other
106 print "******* Probleme : a la multiplication"
111 def interprete_valeur(self,val):
113 Essaie d'interpréter val (chaîne de caractères)comme :
116 - une chaîne de caractères
117 - une liste d'items d'un type qui précède
118 Retourne la valeur interprétée
120 if not val : return None
122 # on vérifie si val est un entier
124 valeur = string.atoi(val) # on a un entier
128 # on vérifie si val est un réel
130 valeur = string.atof(val) # on a un réel
134 # on vérifie si val est un tuple
139 #PN je n ose pas modifier je rajoute
141 if type(valeur) == types.TupleType:
149 # la liste est hétérogène --> on refuse d'interpréter
150 # self comme une liste
151 # on retourne la string initiale
152 print 'liste hétérogène ',val
155 return tuple(l_new_val)
156 # PN : commente le print
158 # on a réussi à évaluer val en autre chose qu'un tuple ...
159 #print "on a réussi à évaluer %s en autre chose qu'un tuple ..." %val
160 #print 'on trouve : ',str(valeur),' de type : ',type(valeur)
161 # on retourne val comme une string car on n'a pas su l'interpréter
163 if type(valeur).__name__ == 'list':
165 for i in range(len(valeur)):
166 self.dict_valeur.append(valeur[i])
169 def get_valeurs(self):
171 if self.dict_valeur != []:
172 for val in self.dict_valeur:
173 valeurretour.append(val)
175 valeurretour.append(self.valeur)
178 def set_valeur(self,new_valeur):
180 Remplace la valeur de self par new_valeur interprétée
182 self.valeur = self.interprete_valeur(new_valeur)
185 def init_modif(self):
187 Méthode qui déclare l'objet courant comme modifié et propage
188 cet état modifié à ses ascendants
190 self.state = 'modified'
192 self.parent.init_modif()
196 Enregistre le paramètre dans la liste des étapes de son parent (JDC)
198 self.parent.register_parametre(self)
199 self.parent.register(self)
201 def isvalid(self,cr='non'):
203 Retourne 1 si self est valide, 0 sinon
204 Un paramètre est considéré comme valide si :
210 self.cr.fatal("Pas de nom donné au paramètre ")
213 if self.valeur == None :
215 self.cr.fatal("Le paramètre %s ne peut valoir None" % self.nom)
221 Indique si self est obligatoire ou non : retourne toujours 0
225 def isrepetable(self):
227 Indique si self est répétable ou non : retourne toujours 1
231 def liste_mc_presents(self):
236 Méthode qui supprime toutes les boucles de références afin que
237 l'objet puisse être correctement détruit par le garbage collector
245 Rend l'etape courante active.
246 Il faut ajouter le paramètre au contexte global du JDC
250 self.jdc.append_param(self)
256 Rend l'etape courante inactive
257 Il faut supprimer le paramètre du contexte global du JDC
260 self.jdc.del_param(self)
261 self.jdc.delete_concept_after_etape(self,self)
265 Booléenne qui retourne 1 si self est actif, 0 sinon
269 def set_attribut(self,nom_attr,new_valeur):
271 Remplace la valeur de self.nom_attr par new_valeur)
273 if hasattr(self,nom_attr):
274 setattr(self,nom_attr,new_valeur)
277 def supprime_sdprods(self):
279 Il faut supprimer le paramètre qui a été entré dans la liste des
282 self.jdc.delete_param(self)
284 def update_context(self,d):
286 Update le dictionnaire d avec le paramètre que produit self
292 Donne un echo de self sous la forme nom = valeur
294 return self.nom+' = '+str(self.valeur)
298 Retourne le nom du paramètre comme représentation de self
302 def get_sdprods(self,nom_sd):
304 Retourne les concepts produits par la commande
309 """ Génère l'objet rapport (classe CR) """
311 self.isvalid(cr='oui')
316 Retourne le nom interne associé à self
317 Ce nom n'est jamais vu par l'utilisateur dans EFICAS
321 def delete_concept(self,sd):
324 def replace_concept(self,old_sd,sd):
327 def verif_condition_bloc(self):
329 Evalue les conditions de tous les blocs fils possibles
330 (en fonction du catalogue donc de la définition) de self et
331 retourne deux listes :
332 - la première contient les noms des blocs à rajouter
333 - la seconde contient les noms des blocs à supprimer
337 def verif_condition_regles(self,liste_presents):
339 Retourne la liste des mots-clés à rajouter pour satisfaire les règles
340 en fonction de la liste des mots-clés présents
344 def verif_existence_sd(self):
347 def control_sdprods(self,d):
353 class ITEM_PARAMETRE :
354 def __init__(self,param_pere,item=None):
355 self.param_pere = param_pere
360 return self.param_pere.nom+'['+str(self.item)+']'
368 longueur= len(self.param_pere.dict_valeur) - 1
371 if self.item > longueur :