2 # Copyright (C) 2007-2013 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 """ Ce module contient la classe de definition FACT
22 qui permet de spécifier les caractéristiques des mots clés facteurs
31 from N_types import is_sequence
32 from strfunc import ufmt
37 class FACT(N_ENTITE.ENTITE):
40 Classe pour definir un mot cle facteur
42 Cette classe a trois attributs de classe
44 - class_instance qui indique la classe qui devra etre utilisée
45 pour créer l'objet qui servira à controler la conformité d'un
46 mot-clé facteur avec sa définition
50 - label qui indique la nature de l'objet de définition (ici, FACT)
52 class_instance = N_MCFACT.MCFACT
53 list_instance = N_MCLIST.MCList
56 def __init__(self, fr="", docu="", regles=(), statut='f', defaut=None,ang="",
57 min=0, max=1, validators=None, **args):
59 Un mot-clé facteur est caractérisé par les attributs suivants :
70 N_ENTITE.ENTITE.__init__(self, validators)
71 # Initialisation des attributs
75 if type(regles) == types.TupleType:
78 self.regles = (regles,)
85 self.affecter_parente()
87 def __call__(self, val, nom, parent):
89 Construit la structure de donnee pour un mot cle facteur a partir
90 de sa definition (self) de sa valeur (val), de son nom (nom) et de
91 son parent dans l arboresence (parent)
93 Suivant le type de la valeur on retournera soit un objet de type
94 MCFACT soit une liste de type MCLIST.
96 La creation d un mot cle facteur depend de son statut
97 - Si statut ='o' il est obligatoire
98 - Si statut == 'd' il est facultatif mais ses sous mots cles avec
100 - Si statut == 'f' il est facultatif et ses sous mots avec defaut ne
102 - Si statut == 'c' il est cache ???
103 - Si defaut != None, on utilise cette valeur pour calculer la valeur
104 par defaut du mot cle facteur
107 if self.defaut == None:
109 elif type(self.defaut) == types.TupleType:
111 # Est ce utile ? Le défaut pourrait etre uniquement un dict
112 elif type(self.defaut) == types.DictType or isinstance(self.defaut, _F):
115 # On ne devrait jamais passer par la
116 print "On ne devrait jamais passer par la"
118 elif is_sequence(val) and len(val) == 0 and self.statut == 'o':
119 # On est dans le cas où le mcfact est présent mais est une liste/tuple
120 # vide. Il est obligatoire donc on l'initialise. Les règles, mots-clés
121 # obligatoires diront si un mcfact vide est accepté.
124 # On cree toujours une liste de mcfact
125 l = self.list_instance()
126 l.init(nom=nom, parent=parent)
127 if type(val) in (types.TupleType, types.ListType, self.list_instance):
129 if type(v) == types.DictType or isinstance(v, _F):
130 objet = self.class_instance(
131 nom=nom, definition=self, val=v, parent=parent)
133 elif isinstance(v, self.class_instance):
136 l.append(N_OBJECT.ErrorObj(self, v, parent, nom))
137 elif type(val) == types.DictType or isinstance(val, _F):
138 objet = self.class_instance(
139 nom=nom, definition=self, val=val, parent=parent)
141 elif isinstance(val, self.class_instance):
144 l.append(N_OBJECT.ErrorObj(self, val, parent, nom))
148 def verif_cata(self):
154 self.check_validators()
155 self.verif_cata_regles()