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
49 self.valeur = self.interprete_valeur(valeur)
52 # La classe PARAMETRE n'a pas de définition : on utilise self pour
55 self.jdc = self.parent = CONTEXT.get_current_step()
56 self.niveau=self.parent.niveau
58 self.state='undetermined'
61 def __getitem__(self,key):
62 param_item=ITEM_PARAMETRE(self,key)
65 def interprete_valeur(self,val):
67 Essaie d'interpréter val (chaîne de caractères)comme :
70 - une chaîne de caractères
71 - une liste d'items d'un type qui précède
72 Retourne la valeur interprétée
74 if not val : return None
76 # on vérifie si val est un entier
78 valeur = string.atoi(val) # on a un entier
82 # on vérifie si val est un réel
84 valeur = string.atof(val) # on a un réel
88 # on vérifie si val est un tuple
93 #PN je n ose pas modifier je rajoute
95 if type(valeur) == types.TupleType:
103 # la liste est hétérogène --> on refuse d'interpréter
104 # self comme une liste
105 # on retourne la string initiale
106 print 'liste hétérogène ',val
109 return tuple(l_new_val)
110 # PN : commente le print
112 # on a réussi à évaluer val en autre chose qu'un tuple ...
113 #print "on a réussi à évaluer %s en autre chose qu'un tuple ..." %val
114 #print 'on trouve : ',str(valeur),' de type : ',type(valeur)
115 # on retourne val comme une string car on n'a pas su l'interpréter
117 if type(valeur).__name__ == 'list':
119 for i in range(len(valeur)):
120 self.dict_valeur.append(valeur[i])
123 def get_valeurs(self):
125 if self.dict_valeur != []:
126 for val in self.dict_valeur:
127 valeurretour.append(val)
129 valeurretour.append(self.valeur)
132 def set_valeur(self,new_valeur):
134 Remplace la valeur de self par new_valeur interprétée
136 self.valeur = self.interprete_valeur(new_valeur)
139 def init_modif(self):
141 Méthode qui déclare l'objet courant comme modifié et propage
142 cet état modifié à ses ascendants
144 self.state = 'modified'
146 self.parent.init_modif()
150 Enregistre le paramètre dans la liste des étapes de son parent (JDC)
152 self.parent.register_parametre(self)
153 self.parent.register(self)
155 def isvalid(self,cr='non'):
157 Retourne 1 si self est valide, 0 sinon
158 Un paramètre est considéré comme valide si :
164 self.cr.fatal("Pas de nom donné au paramètre ")
167 if self.valeur == None :
169 self.cr.fatal("Le paramètre %s ne peut valoir None" % self.nom)
175 Indique si self est obligatoire ou non : retourne toujours 0
179 def isrepetable(self):
181 Indique si self est répétable ou non : retourne toujours 1
185 def liste_mc_presents(self):
190 Méthode qui supprime toutes les boucles de références afin que
191 l'objet puisse être correctement détruit par le garbage collector
199 Rend l'etape courante active.
200 Il faut ajouter le paramètre au contexte global du JDC
204 self.jdc.append_param(self)
210 Rend l'etape courante inactive
211 Il faut supprimer le paramètre du contexte global du JDC
214 self.jdc.del_param(self)
215 self.jdc.delete_concept_after_etape(self,self)
219 Booléenne qui retourne 1 si self est actif, 0 sinon
223 def set_attribut(self,nom_attr,new_valeur):
225 Remplace la valeur de self.nom_attr par new_valeur)
227 if hasattr(self,nom_attr):
228 setattr(self,nom_attr,new_valeur)
231 def supprime_sdprods(self):
233 Il faut supprimer le paramètre qui a été entré dans la liste des
236 self.jdc.delete_param(self)
238 def update_context(self,d):
240 Update le dictionnaire d avec le paramètre que produit self
246 Donne un echo de self sous la forme nom = valeur
248 return self.nom+' = '+str(self.valeur)
252 Retourne le nom du paramètre comme représentation de self
256 def get_sdprods(self,nom_sd):
258 Retourne les concepts produits par la commande
263 """ Génère l'objet rapport (classe CR) """
265 self.isvalid(cr='oui')
270 Retourne le nom interne associé à self
271 Ce nom n'est jamais vu par l'utilisateur dans EFICAS
275 def delete_concept(self,sd):
278 def replace_concept(self,old_sd,sd):
281 def verif_condition_bloc(self):
283 Evalue les conditions de tous les blocs fils possibles
284 (en fonction du catalogue donc de la définition) de self et
285 retourne deux listes :
286 - la première contient les noms des blocs à rajouter
287 - la seconde contient les noms des blocs à supprimer
291 def verif_condition_regles(self,liste_presents):
293 Retourne la liste des mots-clés à rajouter pour satisfaire les règles
294 en fonction de la liste des mots-clés présents
298 def verif_existence_sd(self):
301 def control_sdprods(self,d):
307 class ITEM_PARAMETRE :
308 def __init__(self,param_pere,item=None):
309 self.param_pere = param_pere
314 return self.param_pere.nom+'['+str(self.item)+']'
322 longueur= len(self.param_pere.dict_valeur) - 1
325 if self.item > longueur :