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 # ======================================================================
23 Ce module contient la classe mixin MCSIMP qui porte les méthodes
24 nécessaires pour réaliser la validation d'un objet de type MCSIMP
27 Une classe mixin porte principalement des traitements et est
28 utilisée par héritage multiple pour composer les traitements.
34 from Noyau import N_CR
35 from Noyau.N_Exception import AsException
36 from Noyau.N_VALIDATOR import ValError, TypeProtocol, CardProtocol, IntoProtocol
37 from Noyau.N_VALIDATOR import listProto
38 from Noyau.strfunc import ufmt
39 from Extensions.i18n import tr
46 Cette classe est quasiment identique à la classe originale d'EFICAS
47 a part quelques changements cosmétiques et des chagements pour la
48 faire fonctionner de facon plus autonome par rapport à l'environnement
51 A mon avis, il faudrait aller plus loin et réduire les dépendances
52 amont au strict nécessaire.
54 - Est il indispensable de faire l'évaluation de la valeur dans le contexte
55 du jdc dans cette classe.
57 - Ne pourrait on pas doter les objets en présence des méthodes suffisantes
58 pour éviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
59 d'ailleurs modifié la classe pour éviter l'import de GEOM
65 self.state = 'undetermined'
66 self.typeProto = TypeProtocol("type", typ=self.definition.type)
67 self.intoProto = IntoProtocol(
68 "into", into=self.definition.into, val_min=self.definition.val_min, val_max=self.definition.val_max)
69 self.cardProto = CardProtocol(
70 "card", min=self.definition.min, max=self.definition.max)
73 if hasattr(self, 'valid'):
79 def set_valid(self, valid):
80 old_valid = self.get_valid()
82 self.state = 'unchanged'
83 if not old_valid or old_valid != self.valid:
86 def isvalid(self, cr='non'):
88 Cette méthode retourne un indicateur de validité de l'objet de type MCSIMP
90 - 0 si l'objet est invalide
91 - 1 si l'objet est valide
93 Le paramètre cr permet de paramétrer le traitement. Si cr == 'oui'
94 la méthode construit également un comte-rendu de validation
95 dans self.cr qui doit avoir été créé préalablement.
97 if self.state == 'unchanged':
102 # verification presence
103 if self.isoblig() and v == None:
106 _(u"Mandatory keyword : %s has no value"), tr(self.nom))
107 #_(u"Mot-clé : %s obligatoire non valorisé"), self.nom)
110 lval = listProto.adapt(v)
112 # Pour tenir compte des Tuples
113 if hasattr(self.definition.type[0],'ntuple') :
115 if not (type(lval[0]) is tuple) : lval=(lval,)
122 self.cr.fatal(_(u"None is not a valid value"))
123 #self.cr.fatal(_(u"None n'est pas une valeur autorisée"))
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 demandé : on collecte tous les types d'erreur
150 cardProto.adapt(lval)
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)
162 #_(u"Mot-clé %s invalide : %s\nCritère de validité: %s"),
163 _(u"invalid keyword %s : %s\nCriteria : %s"),
164 tr(self.nom), str(e), self.definition.validators.info())
167 # si pas de cr demande, on sort a la toute premiere erreur
172 cardProto.adapt(lval)
173 if self.definition.validators:
174 if hasattr(self.definition.validators, 'set_MCSimp'):
175 self.definition.validators.set_MCSimp(self)
176 self.definition.validators.convert(lval)
180 self.set_valid(valid)
184 """ indique si le mot-clé est obligatoire
186 return self.definition.statut == 'o'
188 def init_modif_up(self):
190 Propage l'état modifié au parent s'il existe et n'est l'objet
193 if self.parent and self.parent != self:
194 self.parent.state = 'modified'
197 """ génère le rapport de validation de self """
199 #self.cr.debut = u"Mot-clé simple : " + self.nom
200 self.cr.debut = u"Simple Keyword : " + tr(self.nom)
201 #self.cr.fin = u"Fin Mot-clé simple : " + self.nom
202 self.cr.fin = u"End Simple Keyword: " + tr(self.nom)
203 self.state = 'modified'
205 self.isvalid(cr='oui')
206 except AsException, e:
208 traceback.print_exc()
209 #self.cr.fatal(_(u"Mot-clé simple : %s %s"), self.nom, e)
210 self.cr.fatal(_(u"Simple Keyword : %s %s"), tr(self.nom), e)