X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Validation%2FV_MCCOMPO.py;h=7653734ed27a0e818bb5d0d54adebfff7514d3b2;hb=8b202e4a0e933f400731a984944bf84aa9a06f48;hp=d751135273ff6937163580bd3a4c1ab37b503faf;hpb=f1ca95b49f76bed371d3bc90fc94bd12a6f17523;p=tools%2Feficas.git diff --git a/Validation/V_MCCOMPO.py b/Validation/V_MCCOMPO.py index d7511352..7653734e 100644 --- a/Validation/V_MCCOMPO.py +++ b/Validation/V_MCCOMPO.py @@ -1,123 +1,143 @@ -#@ MODIF V_MCCOMPO Validation DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS -# -*- coding: iso-8859-1 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION +# coding=utf-8 +# person_in_charge: mathieu.courtois at edf.fr # ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 2007-2021 EDF R&D # 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 de base MCCOMPO qui sert à factoriser + Ce module contient la classe de base MCCOMPO qui sert a factoriser les traitements des objets composites de type OBJECT """ +from __future__ import print_function # Modules Python -import string,types +from __future__ import absolute_import +try : + from builtins import str + from builtins import object +except : pass + +import os import traceback # Modules EFICAS +from Noyau import MAXSIZE, MAXSIZE_MSGCHK from Noyau import N_CR from Noyau.N_Exception import AsException -class MCCOMPO: - """ - L'attribut mc_liste a été créé par une classe dérivée de la - classe MCCOMPO du Noyau - """ - - CR=N_CR.CR - - def __init__(self): - self.state='undetermined' - - def init_modif_up(self): - """ - Propage l'état modifié au parent s'il existe et n'est pas l'objet - lui-meme - """ - if self.parent and self.parent != self : - self.parent.state = 'modified' - - def report(self): - """ - Génère le rapport de validation de self - """ - self.cr=self.CR() - self.cr.debut = self.txt_nat+self.nom - self.cr.fin = "Fin "+self.txt_nat+self.nom - for child in self.mc_liste: - self.cr.add(child.report()) - self.state = 'modified' - try: - self.isvalid(cr='oui') - except AsException,e: - if CONTEXT.debug : traceback.print_exc() - self.cr.fatal(string.join((self.txt_nat,self.nom,str(e)))) - return self.cr - - def verif_regles(self): - """ - A partir du dictionnaire des mots-clés présents, vérifie si les règles - de self sont valides ou non. - - Retourne une string et un booléen : - - - texte = la string contient le message d'erreur de la (les) règle(s) violée(s) ('' si aucune) - - - testglob = booléen 1 si toutes les règles OK, 0 sinon - """ - #dictionnaire=self.dict_mc_presents(restreint='oui') - dictionnaire=self.dict_mc_presents(restreint='non') # On verifie les regles avec les defauts affectés - texte='' - testglob = 1 - for r in self.definition.regles: - erreurs,test=r.verif(dictionnaire) - testglob = testglob*test - if erreurs != '': - if len(texte) > 1 : - texte=texte+'\n'+erreurs - else : - texte = texte + erreurs - return texte,testglob - - def dict_mc_presents(self,restreint='non'): - """ - Retourne le dictionnaire {mocle : objet} construit à partir de self.mc_liste - Si restreint == 'non' : on ajoute tous les mots-clés simples du catalogue qui ont - une valeur par défaut - Si restreint == 'oui' : on ne prend que les mots-clés effectivement entrés par - l'utilisateur (cas de la vérification des règles) - """ - dico={} - # on ajoute les couples {nom mot-clé:objet mot-clé} effectivement présents - for v in self.mc_liste: - if v == None : continue - k=v.nom - dico[k]=v - if restreint == 'oui' : return dico - # Si restreint != 'oui', - # on ajoute les couples {nom mot-clé:objet mot-clé} des mots-clés simples - # possibles pour peu qu'ils aient une valeur par défaut - for k,v in self.definition.entites.items(): - if v.label != 'SIMP' : continue - if not v.defaut : continue - if not dico.has_key(k): - dico[k]=v(nom=k,val=None,parent=self) - return dico - - +class MCCOMPO(object): + + """ + L'attribut mcListe a ete cree par une classe derivee de la + classe MCCOMPO du Noyau + """ + + CR = N_CR.CR + + def __init__(self): + self.state = 'undetermined' + # defini dans les classes derivees + self.txt_nat = '' + + def initModifUp(self): + """ + Propage l'etat modifie au parent s'il existe et n'est pas l'objet + lui-meme + """ + if self.parent and self.parent != self: + self.parent.state = 'modified' + + def report(self): + """ + Genere le rapport de validation de self + """ + self.cr = self.CR() + self.cr.debut = self.txt_nat + self.nom + self.cr.fin = "END " + self.txt_nat + self.nom + i = 0 + for child in self.mcListe: + i += 1 + if i > MAXSIZE: + print(MAXSIZE_MSGCHK.format(MAXSIZE, len(self.mcListe))) + break + self.cr.add(child.report()) + self.state = 'modified' + try: + self.isValid(cr='oui') + except AsException as e: + if CONTEXT.debug: + traceback.print_exc() + self.cr.fatal(' '.join((self.txt_nat, self.nom, str(e)))) + return self.cr + + def verifRegles(self): + """ + A partir du dictionnaire des mots-cles presents, verifie si les regles + de self sont valides ou non. + + Retourne une chaine et un booleen : + + - texte = la chaine contient le message d'erreur de la (les) regle(s) violee(s) ('' si aucune) + + - testglob = booleen 1 si toutes les regles OK, 0 sinon + """ + # On verifie les regles avec les defauts affectes + dictionnaire = self.dictMcPresents(restreint='non') + texte = [''] + testglob = 1 + for r in self.definition.regles: + erreurs, test = r.verif(dictionnaire) + testglob = testglob * test + if erreurs != '': + texte.append(str(erreurs)) + texte = os.linesep.join(texte) + return texte, testglob + + def dictMcPresents(self, restreint='non'): + """ + Retourne le dictionnaire {mocle : objet} construit a partir de self.mcListe + Si restreint == 'non' : on ajoute tous les mots-cles simples du catalogue qui ont + une valeur par defaut + Si restreint == 'oui' : on ne prend que les mots-cles effectivement entres par + l'utilisateur (cas de la verification des regles) + """ + dico = {} + # on ajoute les couples {nom mot-cle:objet mot-cle} effectivement + # presents + for v in self.mcListe: + if v == None: + continue + k = v.nom + dico[k] = v + if restreint == 'oui': + return dico + # Si restreint != 'oui', + # on ajoute les couples {nom mot-cle:objet mot-cle} des mots-cles simples + # possibles pour peu qu'ils aient une valeur par defaut + for k, v in list(self.definition.entites.items()): + if v.label != 'SIMP': + continue + if not v.defaut: + continue + if not k in dico : + dico[k] = v(nom=k, val=None, parent=self) + # on ajoute l'objet detenteur de regles pour des validations plus + # sophistiquees (a manipuler avec precaution) + dico["self"] = self + return dico