+ self.cr.fatal(_(u"Argument(s) non permis : %r pour la règle : %s"), l, txt)
+
+ def check_definition(self, parent):
+ """Verifie la definition d'un objet composite (commande, fact, bloc)."""
+ args = self.entites.copy()
+ mcs = set()
+ for nom, val in args.items():
+ if val.label == 'SIMP':
+ mcs.add(nom)
+ #XXX
+ #if val.max != 1 and val.type == 'TXM':
+ #print "#CMD", parent, nom
+ elif val.label == 'FACT':
+ val.check_definition(parent)
+ # CALC_SPEC !
+ #assert self.label != 'FACT', \
+ #'Commande %s : Mot-clef facteur present sous un mot-clef facteur : interdit !' \
+ #% parent
+ else:
+ continue
+ del args[nom]
+ # seuls les blocs peuvent entrer en conflit avec les mcs du plus haut niveau
+ for nom, val in args.items():
+ if val.label == 'BLOC':
+ mcbloc = val.check_definition(parent)
+ #XXX
+ #print "#BLOC", parent, re.sub('\s+', ' ', val.condition)
+ #assert mcs.isdisjoint(mcbloc), "Commande %s : Mot(s)-clef(s) vu(s) plusieurs fois : %s" \
+ # % (parent, tuple(mcs.intersection(mcbloc)))
+ return mcs
+
+ def check_op(self, valmin=-9999, valmax=9999):
+ """Vérifie l'attribut op."""
+ if self.op is not None and \
+ (type(self.op) is not int or self.op < valmin or self.op > valmax):
+ self.cr.fatal(_(u"L'attribut 'op' doit être un entier "
+ u"compris entre %d et %d : %r"), valmin, valmax, self.op)
+
+ def check_proc(self):
+ """Vérifie l'attribut proc."""
+ if self.proc is not None and not isinstance(self.proc, N_OPS.OPS):
+ self.cr.fatal(_(u"L'attribut op doit être une instance d'OPS : %r"), self.proc)
+
+ def check_regles(self):
+ """Vérifie l'attribut regles."""
+ if type(self.regles) is not tuple:
+ self.cr.fatal(_(u"L'attribut 'regles' doit être un tuple : %r"),
+ self.regles)
+
+ def check_fr(self):
+ """Vérifie l'attribut fr."""
+ if type(self.fr) not in (str, unicode):
+ self.cr.fatal(_(u"L'attribut 'fr' doit être une chaine de caractères : %r"),
+ self.fr)
+
+ def check_docu(self):
+ """Vérifie l'attribut docu."""
+ if type(self.docu) not in (str, unicode):
+ self.cr.fatal(_(u"L'attribut 'docu' doit être une chaine de caractères : %r"),
+ self.docu)
+
+ def check_nom(self):
+ """Vérifie l'attribut proc."""
+ if type(self.nom) != types.StringType :
+ self.cr.fatal(_(u"L'attribut 'nom' doit être une chaine de caractères : %r"),
+ self.nom)
+
+ def check_reentrant(self):
+ """Vérifie l'attribut reentrant."""
+ if self.reentrant not in ('o', 'n', 'f'):
+ self.cr.fatal(_(u"L'attribut 'reentrant' doit valoir 'o','n' ou 'f' : %r"),
+ self.reentrant)
+
+ def check_statut(self, into=('o', 'f', 'c', 'd')):
+ """Vérifie l'attribut statut."""
+ if self.statut not in into:
+ self.cr.fatal(_(u"L'attribut 'statut' doit être parmi %s : %r"),
+ into, self.statut)
+
+ def check_condition(self):
+ """Vérifie l'attribut condition."""
+ if self.condition != None :
+ if type(self.condition) != types.StringType :
+ self.cr.fatal(_(u"L'attribut 'condition' doit être une chaine de caractères : %r"),
+ self.condition)
+ else:
+ self.cr.fatal(_(u"La condition ne doit pas valoir None !"))
+
+ def check_min_max(self):
+ """Vérifie les attributs min/max."""
+ if type(self.min) != types.IntType :
+ if self.min != '**':
+ self.cr.fatal(_(u"L'attribut 'min' doit être un entier : %r"), self.min)
+ if type(self.max) != types.IntType :
+ if self.max != '**':
+ self.cr.fatal(_(u"L'attribut 'max' doit être un entier : %r"), self.max)
+ if self.min > self.max :
+ self.cr.fatal(_(u"Nombres d'occurrence min et max invalides : %r %r"),
+ self.min, self.max)
+
+ def check_validators(self):
+ """Vérifie les validateurs supplémentaires"""
+ if self.validators and not self.validators.verif_cata():
+ self.cr.fatal(_(u"Un des validateurs est incorrect. Raison : %s"),
+ self.validators.cata_info)
+
+ def check_homo(self):
+ """Vérifie l'attribut homo."""
+ if self.homo != 0 and self.homo != 1 :
+ self.cr.fatal(_(u"L'attribut 'homo' doit valoir 0 ou 1 : %r"), self.homo)