2 # person_in_charge: mathieu.courtois at edf.fr
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2017 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 # ======================================================================
23 Ce module contient la classe mixin MCSIMP qui porte les methodes
24 necessaires pour realiser la validation d'un objet de type MCSIMP
27 Une classe mixin porte principalement des traitements et est
28 utilisee par heritage multiple pour composer les traitements.
31 from __future__ import absolute_import
33 from builtins import str
34 from builtins import object
39 from Noyau import N_CR
40 from Noyau.N_Exception import AsException
41 from Noyau.N_VALIDATOR import ValError, TypeProtocol, CardProtocol, IntoProtocol
42 from Noyau.N_VALIDATOR import listProto
43 from Extensions.i18n import tr
50 Cette classe est quasiment identique a la classe originale d'EFICAS
51 a part quelques changements cosmetiques et des chagements pour la
52 faire fonctionner de facon plus autonome par rapport a l'environnement
55 A mon avis, il faudrait aller plus loin et reduire les dependances
56 amont au strict necessaire.
58 - Est il indispensable de faire l'evaluation de la valeur dans le contexte
59 du jdc dans cette classe.
61 - Ne pourrait on pas doter les objets en presence des methodes suffisantes
62 pour eviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
63 d'ailleurs modifie la classe pour eviter l'import de GEOM
69 self.state = 'undetermined'
70 self.typeProto = TypeProtocol("type", typ=self.definition.type)
71 self.intoProto = IntoProtocol(
72 "into", into=self.definition.into, val_min=self.definition.val_min, val_max=self.definition.val_max)
73 self.cardProto = CardProtocol(
74 "card", min=self.definition.min, max=self.definition.max)
77 if hasattr(self, 'valid'):
83 def setValid(self, valid):
84 old_valid = self.getValid()
86 self.state = 'unchanged'
87 if not old_valid or old_valid != self.valid:
90 def isValid(self, cr='non'):
92 Cette methode retourne un indicateur de validite de l'objet de type MCSIMP
94 - 0 si l'objet est invalide
95 - 1 si l'objet est valide
97 Le parametre cr permet de parametrer le traitement. Si cr == 'oui'
98 la methode construit egalement un comte-rendu de validation
99 dans self.cr qui doit avoir ete cree prealablement.
101 if self.state == 'unchanged':
106 # verification presence
107 if self.isOblig() and (v == None or v == "" ):
109 self.cr.fatal( "Mandatory keyword : %s has no value" % tr(self.nom))
112 lval = listProto.adapt(v)
114 # Pour tenir compte des Tuples
115 if hasattr(self.definition.type[0],'ntuple') :
117 if (not (type(lval[0]) is tuple)) and (not (type(lval[0]) is list)) : lval=(lval,)
123 self.cr.fatal("None is not a valid value")
126 # typeProto=TypeProtocol("type",typ=self.definition.type)
127 # intoProto=IntoProtocol("into",into=self.definition.into,val_min=self.definition.val_min,val_max=self.definition.val_max)
128 # cardProto=CardProtocol("card",min=self.definition.min,max=self.definition.max)
129 # typeProto=self.definition.typeProto
130 # intoProto=self.definition.intoProto
131 # cardProto=self.definition.cardProto
132 typeProto = self.typeProto
133 intoProto = self.intoProto
134 cardProto = self.cardProto
136 # un cr est demande : on collecte tous les types d'erreur
140 except ValError as e:
142 self.cr.fatal(str(e))
146 except ValError as e:
148 self.cr.fatal(str(e))
150 cardProto.adapt(lval)
151 except ValError as e:
153 self.cr.fatal(str(e))
155 # On verifie les validateurs s'il y en a et si necessaire (valid == 1)
157 if valid and self.definition.validators:
159 self.definition.validators.convert(lval)
160 except ValError as e:
162 "invalid keyword %s : %s\nCriteria : %s" % (tr(self.nom)), str(e), self.definition.validators.info())
165 # si pas de cr demande, on sort a la toute premiere erreur
170 cardProto.adapt(lval)
171 if self.definition.validators:
172 if hasattr(self.definition.validators, 'set_MCSimp'):
173 self.definition.validators.set_MCSimp(self)
174 self.definition.validators.convert(lval)
175 except ValError as e:
182 """ indique si le mot-cle est obligatoire
184 return self.definition.statut == 'o'
186 def initModifUp(self):
188 Propage l'etat modifie au parent s'il existe et n'est l'objet
191 if self.parent and self.parent != self:
192 self.parent.state = 'modified'
195 """ genere le rapport de validation de self """
197 self.cr.debut = "Simple Keyword : " + tr(self.nom)
198 self.cr.fin = "End Simple Keyword: " + tr(self.nom)
199 self.state = 'modified'
201 self.isValid(cr='oui')
202 except AsException as e:
204 traceback.print_exc()
205 self.cr.fatal("Simple Keyword : %s %s" % (tr(self.nom), e))