9 from Noyau.N_utils import repr_float
10 from Noyau.N_ASSD import ASSD,assd
11 from Noyau.N_GEOM import GEOM,geom
12 from Noyau.N_CO import CO
13 from Noyau.N_EVAL import EVAL
14 from Extensions import parametre
17 class MCSIMP(I_OBJECT.OBJECT):
20 Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
23 if self.valeur == None :
25 elif type(self.valeur) == types.FloatType :
26 txt = repr_float(self.valeur)
27 elif type(self.valeur) in (types.ListType,types.TupleType) :
30 for val in self.valeur:
31 if type(val) == types.FloatType :
32 txt=txt + i*',' + repr_float(val)
33 elif type(val) == types.InstanceType and isinstance(val,ASSD):
34 txt = txt + i*',' + val.get_name()
36 txt = txt + i*','+ myrepr.repr(val)
41 if type(txt) != types.StringType:
42 if type(txt) == types.InstanceType:
43 if isinstance(txt,parametre.PARAMETRE):
46 # il faut tronquer txt au delà d'un certain nombre de caractères
47 # et avant tout retour chariot (txt peut être une chaîne de caractères
48 # sur plusieurs lignes (ex:shell)
49 txt = string.split(txt,'\n')[0]
57 Retourne une chaîne de caractère représentant la valeur de self
60 if type(val) != types.TupleType :
69 s=s+item.get_name()+','
75 def get_min_max(self):
76 return self.definition.min,self.definition.max
80 Méthode booléenne qui retourne 1 si l'objet attend un objet ASSD
81 qui n'existe pas encore (type CO()), 0 sinon
83 for typ in self.definition.type:
84 if type(typ) == types.ClassType :
85 if typ is CO : return 1
90 Méthode booléenne qui retourne 1 si le MCS attend un objet de type ASSD
93 for typ in self.definition.type:
94 if type(typ) == types.ClassType :
95 if issubclass(typ,ASSD) and not issubclass(typ,GEOM):
99 def wait_assd_or_geom(self):
101 Retourne 1 si le mot-clé simple attend un objet de type
102 assd, ASSD, geom ou GEOM
103 Retourne 0 dans le cas contraire
105 for typ in self.definition.type:
106 if type(typ) == types.ClassType :
107 if typ in (GEOM,ASSD,geom,assd) or issubclass(typ,GEOM) :
113 Retourne 1 si le mot-clé simple attend un objet de type GEOM
114 Retourne 0 dans le cas contraire
116 for typ in self.definition.type:
117 if type(typ) == types.ClassType :
118 if issubclass(typ,GEOM) : return 1
123 Retourne 1 si le mot-clé simple attend un objet de type TXM
124 Retourne 0 dans le cas contraire
126 for typ in self.definition.type:
127 if typ == 'TXM' :return 1
130 def get_liste_valeurs(self):
133 if self.valeur == None:
135 elif type(self.valeur) == types.TupleType:
136 return list(self.valeur)
137 elif type(self.valeur) == types.ListType:
143 return self.definition.statut=='o'
145 def set_valeur(self,new_valeur,evaluation='oui'):
147 Remplace la valeur de self(si elle existe) par new_valeur
148 - si evaluation = 'oui' :
149 essaie d'évaluer new_valeur dans le contexte
150 - si evaluation = 'non' :
151 n'essaie pas d'évaluer (on stocke une string ou
152 une valeur de la liste into )
154 if evaluation == 'oui' and not self.wait_assd_or_geom():
155 valeur,test = self.eval_valeur(new_valeur)
157 self.val = new_valeur
162 # On n'a pas trouve de concept ni réussi à évaluer la valeur
164 # Si le mot cle simple attend un type CO on crée un objet de ce
165 # type de nom new_valeur
168 self.valeur=CO(new_valeur)
170 traceback.print_exc()
175 elif type(new_valeur)==types.StringType and self.wait_TXM():
176 self.val = new_valeur
177 self.valeur = new_valeur
183 # on ne fait aucune vérification ...
185 self.valeur = eval(new_valeur)
186 self.val = eval(new_valeur)
190 self.valeur = new_valeur
191 self.val = new_valeur
195 def eval_valeur(self,new_valeur):
197 Essaie d'évaluer new_valeur comme une SD, une déclaration Python
199 Retourne la valeur évaluée (ou None) et le test de réussite (1 ou 0)
201 #sd = self.jdc.get_sd_avant_etape(new_valeur,self.etape)
202 sd = self.jdc.get_contexte_avant(self.etape).get(new_valeur,None)
209 objet = eval(new_valeur,d)
212 if CONTEXT.debug : traceback.print_exc()
215 def delete_concept(self,sd):
220 Met a jour la valeur du mot cle simple suite à la disparition
223 if type(self.valeur) == types.TupleType :
224 if sd in self.valeur:
225 self.valeur=list(self.valeur)
226 self.valeur.remove(sd)
228 elif type(self.valeur) == types.ListType:
229 if sd in self.valeur:
230 self.valeur.remove(sd)
233 if self.valeur == sd:
239 """ Retourne une copie de self """
240 objet = self.makeobjet()
242 objet.valeur = copy(self.valeur)
243 objet.val = copy(self.val)
247 return self.definition(val = None, nom = self.nom,parent = self.parent)
249 def get_sd_utilisees(self):
251 Retourne une liste qui contient la SD utilisée par self si c'est le cas
252 ou alors une liste vide
255 if type(self.valeur) == types.InstanceType:
256 #XXX Est ce différent de isinstance(self.valeur,ASSD) ??
257 if issubclass(self.valeur.__class__,ASSD) : l.append(self.valeur)