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
32 # import de modules Eficas
33 from Noyau.N_CR import CR
37 Cette classe permet de créer des objets de type PARAMETRE
38 cad des affectations directes dans le jeu de commandes (ex: a=10.)
39 qui sont interprétées par le parseur de fichiers Python.
40 Les objets ainsi créés constituent des paramètres pour le jdc
46 def __init__(self,nom,valeur=None):
47 # parent ne peut être qu'un objet de type JDC
48 self.valeur = self.interprete_valeur(valeur)
51 # La classe PARAMETRE n'a pas de définition : on utilise self pour
54 self.jdc = self.parent = CONTEXT.get_current_step()
55 self.niveau=self.parent.niveau
57 self.state='undetermined'
60 self.interprete_valeur(valeur)
62 def __getitem__(self,key):
63 param_item=ITEM_PARAMETRE(self,key)
66 def interprete_valeur(self,val):
68 Essaie d'interpréter val (chaîne de caractères)comme :
71 - une chaîne de caractères
72 - une liste d'items d'un type qui précède
73 Retourne la valeur interprétée
75 if not val : return None
77 # on vérifie si val est un entier
79 valeur = string.atoi(val) # on a un entier
83 # on vérifie si val est un réel
85 valeur = string.atof(val) # on a un réel
89 # on vérifie si val est un tuple
94 #PN je n ose pas modifier je rajoute
96 if type(valeur) == types.TupleType:
104 # la liste est hétérogène --> on refuse d'interpréter
105 # self comme une liste
106 # on retourne la string initiale
107 print 'liste hétérogène ',val
110 return tuple(l_new_val)
111 # PN : commente le print
113 # on a réussi à évaluer val en autre chose qu'un tuple ...
114 #print "on a réussi à évaluer %s en autre chose qu'un tuple ..." %val
115 #print 'on trouve : ',str(valeur),' de type : ',type(valeur)
116 # on retourne val comme une string car on n'a pas su l'interpréter
118 if type(valeur).__name__ == 'list':
120 for i in range(len(valeur)):
121 self.dict_valeur.append(valeur[i])
124 def get_valeurs(self):
126 if self.dict_valeur != []:
127 for val in self.dict_valeur:
128 valeurretour.append(val)
130 valeurretour.append(self.valeur)
133 def set_valeur(self,new_valeur):
135 Remplace la valeur de self par new_valeur interprétée
137 self.valeur = self.interprete_valeur(new_valeur)
140 def init_modif(self):
142 Méthode qui déclare l'objet courant comme modifié et propage
143 cet état modifié à ses ascendants
145 self.state = 'modified'
147 self.parent.init_modif()
151 Enregistre le paramètre dans la liste des étapes de son parent (JDC)
153 self.parent.register_parametre(self)
154 self.parent.register(self)
156 def isvalid(self,cr='non'):
158 Retourne 1 si self est valide, 0 sinon
159 Un paramètre est considéré comme valide si :
165 self.cr.fatal("Pas de nom donné au paramètre ")
168 if self.valeur == None :
170 self.cr.fatal("Le paramètre %s ne peut valoir None" % self.nom)
176 Indique si self est obligatoire ou non : retourne toujours 0
180 def isrepetable(self):
182 Indique si self est répétable ou non : retourne toujours 1
186 def liste_mc_presents(self):
191 Méthode qui supprime toutes les boucles de références afin que
192 l'objet puisse être correctement détruit par le garbage collector
200 Rend l'etape courante active.
201 Il faut ajouter le paramètre au contexte global du JDC
205 self.jdc.append_param(self)
211 Rend l'etape courante inactive
212 Il faut supprimer le paramètre du contexte global du JDC
215 self.jdc.del_param(self)
216 self.jdc.delete_concept_after_etape(self,self)
220 Booléenne qui retourne 1 si self est actif, 0 sinon
224 def set_attribut(self,nom_attr,new_valeur):
226 Remplace la valeur de self.nom_attr par new_valeur)
228 if hasattr(self,nom_attr):
229 setattr(self,nom_attr,new_valeur)
232 def supprime_sdprods(self):
234 Il faut supprimer le paramètre qui a été entré dans la liste des
237 self.jdc.delete_param(self)
239 def update_context(self,d):
241 Update le dictionnaire d avec le paramètre que produit self
247 Donne un echo de self sous la forme nom = valeur
249 return self.nom+' = '+str(self.valeur)
253 Retourne le nom du paramètre comme représentation de self
257 def get_sdprods(self,nom_sd):
259 Retourne les concepts produits par la commande
264 """ Génère l'objet rapport (classe CR) """
266 self.isvalid(cr='oui')
271 Retourne le nom interne associé à self
272 Ce nom n'est jamais vu par l'utilisateur dans EFICAS
276 def delete_concept(self,sd):
279 def replace_concept(self,old_sd,sd):
282 def verif_condition_bloc(self):
284 Evalue les conditions de tous les blocs fils possibles
285 (en fonction du catalogue donc de la définition) de self et
286 retourne deux listes :
287 - la première contient les noms des blocs à rajouter
288 - la seconde contient les noms des blocs à supprimer
292 def verif_condition_regles(self,liste_presents):
294 Retourne la liste des mots-clés à rajouter pour satisfaire les règles
295 en fonction de la liste des mots-clés présents
299 def verif_existence_sd(self):
302 def control_sdprods(self,d):
308 class ITEM_PARAMETRE :
309 def __init__(self,param_pere,item=None):
310 self.param_pere = param_pere
315 return self.param_pere.nom+'['+str(self.item)+']'
323 longueur= len(self.param_pere.dict_valeur) - 1
326 if self.item > longueur :