2 # person_in_charge: mathieu.courtois at edf.fr
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2015 EDF R&D WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
20 # ======================================================================
24 Ce module contient la classe de base MCCOMPO qui sert a factoriser
25 les traitements des objets composites de type OBJECT
27 from __future__ import print_function
29 from __future__ import absolute_import
31 from builtins import str
32 from builtins import object
39 from Noyau import MAXSIZE, MAXSIZE_MSGCHK
40 from Noyau import N_CR
41 from Noyau.N_Exception import AsException
44 class MCCOMPO(object):
47 L'attribut mc_liste a ete cree par une classe derivee de la
48 classe MCCOMPO du Noyau
54 self.state = 'undetermined'
55 # defini dans les classes derivees
58 def init_modif_up(self):
60 Propage l'etat modifie au parent s'il existe et n'est pas l'objet
63 if self.parent and self.parent != self:
64 self.parent.state = 'modified'
68 Genere le rapport de validation de self
71 self.cr.debut = self.txt_nat + self.nom
72 self.cr.fin = "END " + self.txt_nat + self.nom
74 for child in self.mc_liste:
77 print(MAXSIZE_MSGCHK.format(MAXSIZE, len(self.mc_liste)))
79 self.cr.add(child.report())
80 self.state = 'modified'
82 self.isvalid(cr='oui')
83 except AsException as e:
86 self.cr.fatal(' '.join((self.txt_nat, self.nom, str(e))))
89 def verif_regles(self):
91 A partir du dictionnaire des mots-cles presents, verifie si les regles
92 de self sont valides ou non.
94 Retourne une chaine et un booleen :
96 - texte = la chaine contient le message d'erreur de la (les) regle(s) violee(s) ('' si aucune)
98 - testglob = booleen 1 si toutes les regles OK, 0 sinon
100 # On verifie les regles avec les defauts affectes
101 dictionnaire = self.dict_mc_presents(restreint='non')
104 for r in self.definition.regles:
105 erreurs, test = r.verif(dictionnaire)
106 testglob = testglob * test
108 texte.append(str(erreurs))
109 texte = os.linesep.join(texte)
110 return texte, testglob
112 def dict_mc_presents(self, restreint='non'):
114 Retourne le dictionnaire {mocle : objet} construit a partir de self.mc_liste
115 Si restreint == 'non' : on ajoute tous les mots-cles simples du catalogue qui ont
116 une valeur par defaut
117 Si restreint == 'oui' : on ne prend que les mots-cles effectivement entres par
118 l'utilisateur (cas de la verification des regles)
121 # on ajoute les couples {nom mot-cle:objet mot-cle} effectivement
123 for v in self.mc_liste:
128 if restreint == 'oui':
130 # Si restreint != 'oui',
131 # on ajoute les couples {nom mot-cle:objet mot-cle} des mots-cles simples
132 # possibles pour peu qu'ils aient une valeur par defaut
133 for k, v in list(self.definition.entites.items()):
134 if v.label != 'SIMP':
139 dico[k] = v(nom=k, val=None, parent=self)
140 # on ajoute l'objet detenteur de regles pour des validations plus
141 # sophistiquees (a manipuler avec precaution)