1 # -*- coding: iso-8859-1 -*-
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
22 """ Ce module contient la classe de definition FACT
23 qui permet de spécifier les caractéristiques des mots clés facteurs
32 from N_types import is_sequence
33 from strfunc import ufmt
37 class FACT(N_ENTITE.ENTITE):
39 Classe pour definir un mot cle facteur
41 Cette classe a trois attributs de classe
43 - class_instance qui indique la classe qui devra etre utilisée
44 pour créer l'objet qui servira à controler la conformité d'un
45 mot-clé facteur avec sa définition
49 - label qui indique la nature de l'objet de définition (ici, FACT)
51 class_instance = N_MCFACT.MCFACT
52 list_instance = N_MCLIST.MCList
55 def __init__(self,fr="",ang="",docu="",regles=(),statut='f',defaut=None,
56 min=0,max=1,validators=None,**args):
59 Un mot-clé facteur est caractérisé par les attributs suivants :
71 N_ENTITE.ENTITE.__init__(self,validators)
72 # Initialisation des attributs
76 if type(regles)== types.TupleType:
86 self.affecter_parente()
88 def __call__(self,val,nom,parent):
90 Construit la structure de donnee pour un mot cle facteur a partir
91 de sa definition (self) de sa valeur (val), de son nom (nom) et de
92 son parent dans l arboresence (parent)
94 Suivant le type de la valeur on retournera soit un objet de type
95 MCFACT soit une liste de type MCLIST.
97 La creation d un mot cle facteur depend de son statut
98 - Si statut ='o' il est obligatoire
99 - Si statut == 'd' il est facultatif mais ses sous mots cles avec
101 - Si statut == 'f' il est facultatif et ses sous mots avec defaut ne
103 - Si statut == 'c' il est cache ???
104 - Si defaut != None, on utilise cette valeur pour calculer la valeur
105 par defaut du mot cle facteur
108 if self.defaut == None:
110 elif type(self.defaut) == types.TupleType:
112 # Est ce utile ? Le défaut pourrait etre uniquement un dict
113 elif type(self.defaut) == types.DictType or isinstance(self.defaut,_F):
116 # On ne devrait jamais passer par la
117 print "On ne devrait jamais passer par la"
119 elif is_sequence(val) and len(val) == 0 and self.statut == 'o':
120 # On est dans le cas où le mcfact est présent mais est une liste/tuple
121 # vide. Il est obligatoire donc on l'initialise. Les règles, mots-clés
122 # obligatoires diront si un mcfact vide est accepté.
125 # On cree toujours une liste de mcfact
126 l=self.list_instance()
127 l.init(nom = nom,parent=parent)
128 if type(val) in (types.TupleType, types.ListType, self.list_instance) :
130 if type(v) == types.DictType or isinstance(v, _F):
131 objet=self.class_instance(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(nom=nom,definition=self,val=val,parent=parent)
140 elif isinstance(val, self.class_instance):
143 l.append(N_OBJECT.ErrorObj(self,val,parent,nom))
147 def verif_cata(self):
153 self.check_validators()
154 self.verif_cata_regles()