X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Noyau%2FN_ENTITE.py;h=eafce7ad2808ca7750dba6f66f92b0cc9ee7a98b;hb=cdd358f4041f957701ac10d86766a85baaef4f78;hp=5db7f21661d4bd4e39d10153ee66ffcff1994b6e;hpb=61f2a263b67981f299c496ce7ef8bccc3ac6e68b;p=tools%2Feficas.git diff --git a/Noyau/N_ENTITE.py b/Noyau/N_ENTITE.py index 5db7f216..eafce7ad 100644 --- a/Noyau/N_ENTITE.py +++ b/Noyau/N_ENTITE.py @@ -1,32 +1,33 @@ -#@ MODIF N_ENTITE Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_ENTITE Noyau DATE 30/08/2011 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2011 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # -# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT -# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF -# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. # -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# # ====================================================================== -""" +""" Ce module contient la classe ENTITE qui est la classe de base de toutes les classes de definition d'EFICAS. """ +import re import N_CR import N_VALIDATOR @@ -41,14 +42,14 @@ class ENTITE: def __init__(self,validators=None): """ - Initialise les deux attributs regles et entites d'une classe dérivée - à : pas de règles et pas de sous-entités. - - L'attribut regles doit contenir la liste des regles qui s'appliquent - sur ses sous-entités + Initialise les deux attributs regles et entites d'une classe derivee + : pas de regles et pas de sous-entites. + + L'attribut regles doit contenir la liste des regles qui s'appliquent + sur ses sous-entites - L'attribut entités doit contenir le dictionnaires des sous-entités - (clé = nom, valeur=objet) + L'attribut entites doit contenir le dictionnaires des sous-entites + (cle = nom, valeur=objet) """ self.regles=() self.entites={} @@ -60,9 +61,9 @@ class ENTITE: def affecter_parente(self): """ Cette methode a pour fonction de donner un nom et un pere aux - sous entités qui n'ont aucun moyen pour atteindre leur parent + sous entites qui n'ont aucun moyen pour atteindre leur parent directement - Il s'agit principalement des mots cles + Il s'agit principalement des mots cles """ for k,v in self.entites.items(): v.pere = self @@ -70,39 +71,39 @@ class ENTITE: def verif_cata(self): """ - Cette methode sert à valider les attributs de l'objet de définition + Cette methode sert a valider les attributs de l'objet de definition """ - raise "La méthode verif_cata de la classe %s doit etre implémentée" % self.__class__.__name__ + raise "La methode verif_cata de la classe %s doit etre implementee" % self.__class__.__name__ def __call__(self): """ - Cette methode doit retourner un objet dérivé de la classe OBJECT + Cette methode doit retourner un objet derive de la classe OBJECT """ - raise "La méthode __call__ de la classe %s doit etre implémentée" % self.__class__.__name__ + raise "La methode __call__ de la classe %s doit etre implementee" % self.__class__.__name__ def report(self): """ - Cette méthode construit pour tous les objets dérivés de ENTITE un - rapport de validation de la définition portée par cet objet + Cette methode construit pour tous les objets derives de ENTITE un + rapport de validation de la definition portee par cet objet """ self.cr = self.CR() self.verif_cata() for k,v in self.entites.items() : try : cr = v.report() - cr.debut = "Début "+v.__class__.__name__+ ' : ' + k + cr.debut = "Debut "+v.__class__.__name__+ ' : ' + k cr.fin = "Fin "+v.__class__.__name__+ ' : ' + k self.cr.add(cr) except: self.cr.fatal("Impossible d'obtenir le rapport de %s %s" %(k,`v`)) print "Impossible d'obtenir le rapport de %s %s" %(k,`v`) - print "père =",self + print "pere =",self return self.cr def verif_cata_regles(self): """ - Cette méthode vérifie pour tous les objets dérivés de ENTITE que - les objets REGLES associés ne portent que sur des sous-entités + Cette methode verifie pour tous les objets derives de ENTITE que + les objets REGLES associes ne portent que sur des sous-entites existantes """ for regle in self.regles : @@ -112,6 +113,35 @@ class ENTITE: l.append(mc) if l != [] : txt = str(regle) - self.cr.fatal("Argument(s) non permis : %s pour la règle : %s" %(`l`,txt)) + self.cr.fatal("Argument(s) non permis : %s pour la regle : %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) + #PNPNPN surcharge + # 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