2 Ce module contient la classe de base MCCOMPO qui sert à factoriser
3 les traitements des objets composites de type OBJECT
10 from Noyau import N_CR
11 from Noyau.N_Exception import AsException
15 L'attribut mc_liste a été créé par une classe dérivée de la
16 classe MCCOMPO du Noyau
22 self.state='undetermined'
24 def init_modif_up(self):
26 Propage l'état modifié au parent s'il existe et n'est pas l'objet
29 if self.parent and self.parent != self :
30 self.parent.state = 'modified'
34 Génère le rapport de validation de self
37 self.cr.debut = self.txt_nat+self.nom
38 self.cr.fin = "Fin "+self.txt_nat+self.nom
39 self.state = 'modified'
41 self.isvalid(cr='oui')
43 if CONTEXT.debug : traceback.print_exc()
44 self.cr.fatal(string.join((self.txt_nat,self.nom,str(e))))
45 for child in self.mc_liste:
46 self.cr.add(child.report())
49 def verif_regles(self):
51 A partir du dictionnaire des mots-clés présents, vérifie si les règles
52 de self sont valides ou non.
54 Retourne une string et un booléen :
56 - texte = la string contient le message d'erreur de la (les) règle(s) violée(s) ('' si aucune)
58 - testglob = booléen 1 si toutes les règles OK, 0 sinon
60 dictionnaire=self.dict_mc_presents(restreint='oui')
63 for r in self.definition.regles:
64 erreurs,test=r.verif(dictionnaire)
65 testglob = testglob*test
68 texte=texte+'\n'+erreurs
70 texte = texte + erreurs
73 def dict_mc_presents(self,restreint='non'):
75 Retourne le dictionnaire {mocle : objet} construit à partir de self.mc_liste
76 Si restreint == 'non' : on ajoute tous les mots-clés simples du catalogue qui ont
78 Si restreint == 'oui' : on ne prend que les mots-clés effectivement entrés par
79 l'utilisateur (cas de la vérification des règles)
82 # on ajoute les couples {nom mot-clé:objet mot-clé} effectivement présents
83 for v in self.mc_liste:
84 if v == None : continue
87 if restreint == 'oui' : return dico
88 # Si restreint != 'oui',
89 # on ajoute les couples {nom mot-clé:objet mot-clé} des mots-clés simples
90 # possibles pour peu qu'ils aient une valeur par défaut
91 for k,v in self.definition.entites.items():
92 if v.label != 'SIMP' : continue
93 if not v.defaut : continue
94 if not dico.has_key(k):
95 dico[k]=v(nom=k,val=None,parent=self)