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
25 from __future__ import absolute_import
26 from __future__ import print_function
28 from builtins import object
34 Classe de base pour definir des types de structures de donnees ASTER
35 equivalent d un concept ASTER
36 Doit_on garder tout ce qui concerne jeveux ? les concepts ?
40 def __init__(self, etape=None, sd=None, reg='oui'):
42 reg est un parametre qui vaut oui ou non :
43 - si oui (défaut) : on enregistre la SD aupres du JDC
44 - si non : on ne l'enregistre pas
50 self.parent = etape.parent
52 self.parent = CONTEXT.getCurrentStep()
54 self.jdc = self.parent.getJdcRoot()
61 self.id = self.parent.regSD(self)
63 self.id = self.parent.o_register(self)
64 # permet de savoir si le concept a été calculé (1) ou non (0)
67 self.order = self.parent.icmd
70 # attributs pour le Catalogue de Structure de Données
71 # "self.cata_sdj" est un attribut de classe
72 self.ptr_class_sdj = None
74 # construit en tant que CO('...')
75 # 0 : assd normal, 1 : type CO, 2 : type CO typé
79 """Retourne le catalogue de SD associé au concept."""
80 if self.ptr_sdj is None:
81 cata_sdj = getattr(self, 'cata_sdj', None)
82 assert cata_sdj, "The attribute 'cata_sdj' must be defined in the class %s" \
83 % self.__class__.__name__
84 assert self.nom, "The attribute 'nom' has not been filled!"
85 if self.ptr_class_sdj is None:
86 self.ptr_class_sdj = importObject(cata_sdj)
87 self.ptr_sdj = self.ptr_class_sdj(nomj=self.nom)
91 """Suppression du catalogue de SD."""
92 if self.ptr_sdj is not None:
93 self.ptr_sdj.supprime(True)
95 self.ptr_class_sdj = None
97 sdj = property(_getSdj, None, _del_sdj)
99 def __getitem__(self, key):
100 text_error = "ASSD.__getitem__ est déprécié car la référence a l'objet ETAPE parent sera supprimée."
101 from warnings import warn
102 warn(text_error, DeprecationWarning, stacklevel=2)
103 return self.etape[key]
105 def setName(self, nom):
106 """Positionne le nom de self
111 """Permet de savoir si l'ASSD est issu d'un type CO.
113 0 : ce n'est pas un type CO
114 1 : c'est un type CO, non encore typé
115 2 : c'est un type CO retypé
119 def changeType(self, new_type):
120 """Type connu a posteriori (type CO)."""
121 self.__class__ = new_type
122 assert self._as_co != 0, 'it should only be called on CO object.'
127 Retourne le nom de self, éventuellement en le demandant au JDC
131 self.nom = self.parent.getName(self) or self.id
135 if self.nom=='sansnom' or self.nom == '':
139 def supprime(self, force=False):
141 Cassage des boucles de références pour destruction du JDC.
142 'force' est utilisée pour faire des suppressions complémentaires
143 (voir les formules dans N_FONCTION).
151 def supprimeSd(self):
152 """Supprime la partie du catalogue de SD."""
153 # 'del self.sdj' appellerait la méthode '_getSdj()'...
157 def accept(self, visitor):
159 Cette methode permet de parcourir l'arborescence des objets
160 en utilisant le pattern VISITEUR
162 visitor.visitASSD(self)
164 def __getstate__(self):
166 Cette methode permet de pickler les objets ASSD
167 Ceci est possible car on coupe les liens avec les objets
168 parent, etape et jdc qui conduiraient a pickler de nombreux
169 objets inutiles ou non picklables.
170 En sortie, l'objet n'est plus tout a fait le même !
172 d = self.__dict__.copy()
173 for key in ('parent', 'etape', 'jdc'):
176 for key in list(d.keys()):
177 if key in ('_as_co', ):
183 def accessible(self):
184 """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD.
187 print(('| accessible ?', self.nom))
188 is_accessible = CONTEXT.getCurrentStep().sdAccessible()
190 print((' `- is_accessible =', repr(is_accessible)))
193 def filter_context(self, context):
194 """Filtre le contexte fourni pour retirer (en gros) ce qui vient du catalogue."""
195 from .N_ENTITE import ENTITE
198 for key, value in list(context.items()):
199 if type(value) is type:
201 if type(value) is types.ModuleType and value.__name__.startswith('Accas'):
203 if issubclass(type(value), type):
205 if isinstance(value, ENTITE):
211 """Conserver uniquement pour la compatibilite avec le catalogue v9 dans eficas."""
213 if not hasattr(self, 'jdc') or self.jdc == None:
216 val = self.jdc.parLot
220 def getEficasAttribut(self, attribut):
221 #print ('getEficasAttribut : ', self, attribut)
222 valeur=self.etape.getMocle(attribut)
224 valeur=self.etape.getMocle(attribut)
230 def getEficasListOfAttributs(self,listeAttributs):
231 from .N_MCLIST import MCList
232 #print ('getEficasListOfAttributs pour', self,listeAttributs)
233 aTraiter=(self.etape,)
234 while len(listeAttributs) > 0 :
235 attribut=listeAttributs.pop(0)
239 resultat=mc.getMocle(attribut)
240 if isinstance(resultat,MCList):
241 for rmc in resultat : nvListe.append(rmc)
242 else : nvListe.append(resultat)
245 #print ('fin getEficasListOfAttributs ', nvListe)
248 def ajouteUnPere(self,pere):
249 # ne fait rien mais est appeler pour tous les types de ASSD
254 def __convert__(cls, valeur):
255 # On accepte les vraies ASSD et les objets 'entier' et 'reel'
256 # qui font tout pour se faire passer pour de vrais entiers/réels.
257 if isinstance(valeur, ASSD) or type(valeur) in (int, float):
259 raise ValueError(_(u"On attend un objet concept."))
260 __convert__ = classmethod(__convert__)
263 class not_checked(ASSD):
265 def __convert__(cls, valeur):
267 __convert__ = classmethod(__convert__)