-#@ MODIF V_MCCOMPO Validation DATE 30/08/2011 AUTEUR COURTOIS M.COURTOIS
-# -*- coding: iso-8859-1 -*-
-# RESPONSABLE COURTOIS M.COURTOIS
-# CONFIGURATION MANAGEMENT OF EDF VERSION
+# coding=utf-8
+# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
-# COPYRIGHT (C) 1991 - 2011 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
"""
- 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='\n'
- 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)
- #on ajoute l'objet detenteur de regles pour des validations plus sophistiquees (a manipuler avec precaution)
- dico["self"]=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