2 # Copyright (C) 2007-2017 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
108 print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
109 print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
110 print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
111 print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
112 print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
116 """Permet de savoir si l'ASSD est issu d'un type CO.
118 0 : ce n'est pas un type CO
119 1 : c'est un type CO, non encore typé
120 2 : c'est un type CO retypé
124 def changeType(self, new_type):
125 """Type connu a posteriori (type CO)."""
126 self.__class__ = new_type
127 assert self._as_co != 0, 'it should only be called on CO object.'
132 Retourne le nom de self, éventuellement en le demandant au JDC
136 self.nom = self.parent.getName(self) or self.id
140 if self.nom=='sansnom' or self.nom == '':
144 def supprime(self, force=False):
146 Cassage des boucles de références pour destruction du JDC.
147 'force' est utilisée pour faire des suppressions complémentaires
148 (voir les formules dans N_FONCTION).
156 def supprimeSd(self):
157 """Supprime la partie du catalogue de SD."""
158 # 'del self.sdj' appellerait la méthode '_getSdj()'...
162 def accept(self, visitor):
164 Cette methode permet de parcourir l'arborescence des objets
165 en utilisant le pattern VISITEUR
167 visitor.visitASSD(self)
169 def __getstate__(self):
171 Cette methode permet de pickler les objets ASSD
172 Ceci est possible car on coupe les liens avec les objets
173 parent, etape et jdc qui conduiraient a pickler de nombreux
174 objets inutiles ou non picklables.
175 En sortie, l'objet n'est plus tout a fait le même !
177 d = self.__dict__.copy()
178 for key in ('parent', 'etape', 'jdc'):
181 for key in list(d.keys()):
182 if key in ('_as_co', ):
188 def accessible(self):
189 """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD.
192 print(('| accessible ?', self.nom))
193 is_accessible = CONTEXT.getCurrentStep().sdAccessible()
195 print((' `- is_accessible =', repr(is_accessible)))
198 def filter_context(self, context):
199 """Filtre le contexte fourni pour retirer (en gros) ce qui vient du catalogue."""
200 from .N_ENTITE import ENTITE
203 for key, value in list(context.items()):
204 if type(value) is type:
206 if type(value) is types.ModuleType and value.__name__.startswith('Accas'):
208 if issubclass(type(value), type):
210 if isinstance(value, ENTITE):
216 """Conserver uniquement pour la compatibilite avec le catalogue v9 dans eficas."""
218 if not hasattr(self, 'jdc') or self.jdc == None:
221 val = self.jdc.parLot
225 def getEficasAttribut(self, attribut):
226 #print ('getEficasAttribut : ', self, attribut)
227 valeur=self.etape.getMocle(attribut)
229 valeur=self.etape.getMocle(attribut)
235 def getEficasListOfAttributs(self,listeAttributs):
236 from .N_MCLIST import MCList
237 #print ('getEficasListOfAttributs pour', self,listeAttributs)
238 aTraiter=(self.etape,)
239 while len(listeAttributs) > 0 :
240 attribut=listeAttributs.pop(0)
241 print ("attribut", attribut)
246 resultat=mc.getMocle(attribut)
247 if isinstance(resultat,MCList):
248 for rmc in resultat : nvListe.append(rmc)
249 else : nvListe.append(resultat)
252 #print ('fin getEficasListOfAttributs ', nvListe)
257 def __convert__(cls, valeur):
258 # On accepte les vraies ASSD et les objets 'entier' et 'reel'
259 # qui font tout pour se faire passer pour de vrais entiers/réels.
260 if isinstance(valeur, ASSD) or type(valeur) in (int, float):
262 raise ValueError(_(u"On attend un objet concept."))
263 __convert__ = classmethod(__convert__)
266 class not_checked(ASSD):
268 def __convert__(cls, valeur):
270 __convert__ = classmethod(__convert__)