2 # Copyright (C) 2007-2021 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
25 from __future__ import absolute_import
26 from __future__ import print_function
29 from . import N_ENTITE
30 from . import N_MCFACT
31 from . import N_MCLIST
33 from .N_types import isSequence
35 from . import N_OBJECT
38 class FACT(N_ENTITE.ENTITE):
41 Classe pour definir un mot cle facteur
43 Cette classe a trois attributs de classe
45 - class_instance qui indique la classe qui devra etre utilisée
46 pour créer l'objet qui servira à controler la conformité d'un
47 mot-clé facteur avec sa définition
51 - label qui indique la nature de l'objet de définition (ici, FACT)
53 class_instance = N_MCFACT.MCFACT
54 list_instance = N_MCLIST.MCList
57 def __init__(self, fr="", docu="", regles=(), statut='f', defaut=None,ang="",fenetreIhm=None,
58 min=0, max=1, validators=None, **args):
60 Un mot-clé facteur est caractérisé par les attributs suivants :
72 N_ENTITE.ENTITE.__init__(self, validators)
73 # Initialisation des attributs
77 if type(regles) == tuple:
80 self.regles = (regles,)
85 if self.max == "**" : self.max=float('inf')
86 if self.min == "**" : self.min=float('-inf')
89 self.affecter_parente()
90 self.fenetreIhm = fenetreIhm
92 def __call__(self, val, nom, parent, dicoPyxbDeConstruction = None):
94 Construit la structure de donnee pour un mot cle facteur a partir
95 de sa definition (self) de sa valeur (val), de son nom (nom) et de
96 son parent dans l arboresence (parent)
98 Suivant le type de la valeur on retournera soit un objet de type
99 MCFACT soit une liste de type MCLIST.
101 La creation d un mot cle facteur depend de son statut
102 - Si statut ='o' il est obligatoire
103 - Si statut == 'd' il est facultatif mais ses sous mots cles avec
105 - Si statut == 'f' il est facultatif et ses sous mots avec defaut ne
107 - Si statut == 'c' il est cache ???
108 - Si defaut != None, on utilise cette valeur pour calculer la valeur
109 par defaut du mot cle facteur
112 if self.defaut == None:
114 elif type(self.defaut) == tuple:
116 # Est ce utile ? Le défaut pourrait etre uniquement un dict
117 elif type(self.defaut) == dict or isinstance(self.defaut, _F):
120 # On ne devrait jamais passer par la
121 print ("On ne devrait jamais passer par la")
123 elif isSequence(val) and len(val) == 0 and self.statut == 'o':
124 # On est dans le cas où le mcfact est présent mais est une liste/tuple
125 # vide. Il est obligatoire donc on l'initialise. Les règles, mots-clés
126 # obligatoires diront si un mcfact vide est accepté.
129 # On cree toujours une liste de mcfact
130 l = self.list_instance()
131 l.init(nom=nom, parent=parent)
132 if type(val) in (tuple, list, self.list_instance):
135 if type(v) == dict or isinstance(v, _F):
136 if dicoPyxbDeConstruction :
137 objet = self.class_instance(
138 nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction[indice])
140 objet = self.class_instance(
141 nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=None)
144 elif isinstance(v, self.class_instance):
145 # if faut gerer ici --> on passe la avec une liste de concept ?
149 l.append(N_OBJECT.ErrorObj(self, v, parent, nom))
150 elif type(val) == dict or isinstance(val, _F):
151 if dicoPyxbDeConstruction :
152 objet = self.class_instance(
153 nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
155 objet = self.class_instance(
156 nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=None)
158 elif isinstance(val, self.class_instance):
159 # idem --> quand passe t on la
162 l.append(N_OBJECT.ErrorObj(self, val, parent, nom))
173 self.checkValidators()
174 self.verifCataRegles()