Salome HOME
bug
[tools/eficas.git] / Validation / V_MCFACT.py
1 # coding=utf-8
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.
9 #
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.
14 #
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.
18 #
19 #
20 # ======================================================================
21
22
23 """
24    Ce module contient la classe mixin MCFACT qui porte les méthodes
25    nécessaires pour réaliser la validation d'un objet de type MCFACT
26    dérivé de OBJECT.
27
28    Une classe mixin porte principalement des traitements et est
29    utilisée par héritage multiple pour composer les traitements.
30 """
31 # Modules EFICAS
32 import V_MCCOMPO
33 from Noyau.strfunc import ufmt
34
35
36 class MCFACT(V_MCCOMPO.MCCOMPO):
37
38     """
39        Cette classe a un attribut de classe :
40
41        - txt_nat qui sert pour les comptes-rendus liés à cette classe
42     """
43
44     txt_nat = u"Mot clé Facteur :"
45
46     def isvalid(self, sd='oui', cr='non'):
47         """
48            Methode pour verifier la validité du MCFACT. Cette méthode
49            peut etre appelée selon plusieurs modes en fonction de la valeur
50            de sd et de cr.
51
52            Si cr vaut oui elle crée en plus un compte-rendu
53            sd est présent pour compatibilité de l'interface mais ne sert pas
54         """
55         if self.state == 'unchanged':
56             return self.valid
57         else:
58             valid = 1
59             if hasattr(self, 'valid'):
60                 old_valid = self.valid
61             else:
62                 old_valid = None
63             for child in self.mc_liste:
64                 if not child.isvalid():
65                     valid = 0
66                     break
67             # Après avoir vérifié la validité de tous les sous-objets, on vérifie
68             # la validité des règles
69             text_erreurs, test_regles = self.verif_regles()
70             if not test_regles:
71                 if cr == 'oui':
72                     self.cr.fatal(
73                         _(u"Règle(s) non respectée(s) : %s"), text_erreurs)
74                 valid = 0
75             #
76             # On verifie les validateurs s'il y en a
77             #
78             if self.definition.validators and not self.definition.validators.verif(self.valeur):
79                 if cr == 'oui':
80                     #self.cr.fatal(_(u"Mot-clé : %s devrait avoir %s"),
81                     #              self.nom, self.definition.validators.info())
82                     self.cr.fatal(_(u"Keyword : %s should have %s"),
83                                   self.nom, self.definition.validators.info())
84                 valid = 0
85             # fin des validateurs
86             #
87             if self.reste_val != {}:
88                 if cr == 'oui':
89                     self.cr.fatal(
90                         #_(u"Mots clés inconnus : %s"), ','.join(self.reste_val.keys()))
91                         _(u"unknow keyword : %s"), ','.join(self.reste_val.keys()))
92                 valid = 0
93             self.valid = valid
94             self.state = 'unchanged'
95             if not old_valid or old_valid != self.valid:
96                 self.init_modif_up()
97             return self.valid