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
45 Cette classe est quasiment identique à la classe originale d'EFICAS
46 a part quelques changements cosmétiques et des chagements pour la
47 faire fonctionner de facon plus autonome par rapport à l'environnement
50 A mon avis, il faudrait aller plus loin et réduire les dépendances
51 amont au strict nécessaire.
53 - Est il indispensable de faire l'évaluation de la valeur dans le contexte
54 du jdc dans cette classe.
56 - Ne pourrait on pas doter les objets en présence des méthodes suffisantes
57 pour éviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
58 d'ailleurs modifié la classe pour éviter l'import de GEOM
64 self.state = 'undetermined'
65 self.typeProto = TypeProtocol("type", typ=self.definition.type)
66 self.intoProto = IntoProtocol(
67 "into", into=self.definition.into, val_min=self.definition.val_min, val_max=self.definition.val_max)
68 self.cardProto = CardProtocol(
69 "card", min=self.definition.min, max=self.definition.max)
72 if hasattr(self, 'valid'):
78 def set_valid(self, valid):
79 old_valid = self.get_valid()
81 self.state = 'unchanged'
82 if not old_valid or old_valid != self.valid:
85 def isvalid(self, cr='non'):
87 Cette méthode retourne un indicateur de validité de l'objet de type MCSIMP
89 - 0 si l'objet est invalide
90 - 1 si l'objet est valide
92 Le paramètre cr permet de paramétrer le traitement. Si cr == 'oui'
93 la méthode construit également un comte-rendu de validation
94 dans self.cr qui doit avoir été créé préalablement.
96 if self.state == 'unchanged':
101 # verification presence
102 if self.isoblig() and v == None:
105 _(u"Mot-clé : %s obligatoire non valorisé"), self.nom)
108 lval = listProto.adapt(v)
110 # Pour tenir compte des Tuples
111 if hasattr(self.definition.type[0],'ntuple') :
113 if not (type(lval[0]) is tuple) : lval=(lval,)
120 self.cr.fatal(_(u"None n'est pas une valeur autorisée"))
123 # typeProto=TypeProtocol("type",typ=self.definition.type)
124 # intoProto=IntoProtocol("into",into=self.definition.into,val_min=self.definition.val_min,val_max=self.definition.val_max)
125 # cardProto=CardProtocol("card",min=self.definition.min,max=self.definition.max)
126 # typeProto=self.definition.typeProto
127 # intoProto=self.definition.intoProto
128 # cardProto=self.definition.cardProto
129 typeProto = self.typeProto
130 intoProto = self.intoProto
131 cardProto = self.cardProto
133 # un cr est demandé : on collecte tous les types d'erreur
147 cardProto.adapt(lval)
152 # On verifie les validateurs s'il y en a et si necessaire (valid == 1)
154 if valid and self.definition.validators:
156 self.definition.validators.convert(lval)
159 _(u"Mot-clé %s invalide : %s\nCritère de validité: %s"),
160 self.nom, str(e), self.definition.validators.info())
163 # si pas de cr demande, on sort a la toute premiere erreur
168 cardProto.adapt(lval)
169 if self.definition.validators:
170 if hasattr(self.definition.validators, 'set_MCSimp'):
171 self.definition.validators.set_MCSimp(self)
172 self.definition.validators.convert(lval)
176 self.set_valid(valid)
180 """ indique si le mot-clé est obligatoire
182 return self.definition.statut == 'o'
184 def init_modif_up(self):
186 Propage l'état modifié au parent s'il existe et n'est l'objet
189 if self.parent and self.parent != self:
190 self.parent.state = 'modified'
193 """ génère le rapport de validation de self """
195 self.cr.debut = u"Mot-clé simple : " + self.nom
196 self.cr.fin = u"Fin Mot-clé simple : " + self.nom
197 self.state = 'modified'
199 self.isvalid(cr='oui')
200 except AsException, e:
202 traceback.print_exc()
203 self.cr.fatal(_(u"Mot-clé simple : %s %s"), self.nom, e)