2 # -*- coding: utf-8 -*-
3 # Copyright (C) 2007-2021 EDF R&D
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License.
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
26 traceback.print_stack()
27 #import raw.efficas as efficas
30 sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
35 import pyxb.binding.basis
36 #import pyxb.utils.utility
37 #import pyxb.utils.domutils
40 from Accas import A_ASSD
45 def delObjPyxb(self, debug=False):
46 if not self.cata or not self.cata.modeleMetier : return
47 if self.nom == 'Consigne' : return None
50 if debug : print ('--------------- in delObjPyxb pour ' , self.nom)
51 if debug : print (self.perePyxb.objPyxb.orderedContent())
52 if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
54 elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
55 if debug : print ('element moi = ', elt, 'id de moi = ', id(self.objPyxb), self.objPyxb)
56 if (elt.elementDeclaration.isPlural()):
57 if debug : print ('je suis Plural')
58 # monIndexInOrderedContent=0
59 # for c in self.perePyxb.objPyxb.orderedContent():
60 # if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(self.objPyxb)): monIndexInOrderedContent += 1
61 # listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
62 # if len(listeObjetsAccas) == 1 : monIndex=0
63 # else : monIndex=listeObjetsAccas.index(self)
64 # listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
65 # listeObjetsPyxb.pop(monIndex)
66 # self.perePyxb.objPyxb.orderedContent().pop(monIndexInOrderedContent)
67 for c in self.perePyxb.objPyxb.orderedContent():
69 if isinstance(c._Content__value,list) and isinstance(c._Content__value[0],type(self.objPyxb)):
70 monIndex=c.value.index(self.objPyxb)
73 if not trouve : print ("************ pas trouve au delete"); return
74 listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
75 listeObjetsPyxb.pop(monIndex)
78 newOrderedContent = []
79 for i in self.perePyxb.objPyxb.orderedContent():
80 if id(self.objPyxb) == id(i._Content__value) : trouve = True ;continue
81 newOrderedContent.append(i)
82 if not trouve : print ('elt a supprimer ', self.nom, 'non trouve')
83 for i in range(len(newOrderedContent)):
84 self.perePyxb.objPyxb.orderedContent()[i]=newOrderedContent[i]
85 self.perePyxb.objPyxb.orderedContent().pop(len(newOrderedContent))
87 setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,None)
88 if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
92 def addObjPyxb(self,indiceDsLeContenu,debug=False):
93 if not self.cata or not self.cata.modeleMetier : return
94 if debug :print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
95 # adherence Accas sur le parent
97 while (parent.isBLOC()):
98 if parent != self.parent : indiceDsLeContenu += parent.rangDsPyxb()
102 if debug :print ('indiceDsLeContenu',indiceDsLeContenu)
103 if debug :print (pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
105 #if self.objPyxb ! = None : self.objPyxb.objAccas=self
106 elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
107 self.perePyxb.objPyxb.orderedContent().insert(indiceDsLeContenu,elt)
108 if (elt.elementDeclaration.isPlural()):
109 # je suis donc un MCList
110 listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
111 if len(listeObjetsAccas) == 1 : monIndex=1
112 else : monIndex=listeObjetsAccas.index(self)
113 listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
114 listeObjetsPyxb.insert(monIndex,self.objPyxb)
116 setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb)
117 if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
118 if debug : print ('fin _____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
121 def rangDsPyxb(self):
122 monRangEnAccas=self.parent.mcListe.index(self)
124 for frere in self.parent.mcListe[0: monRangEnAccas] :
125 rangEnPyxb += frere.longueurDsArbre()
129 class X_MCSIMP(X_OBJECT):
130 # -----------------------
132 def buildObjPyxb(self, debug=True) :
133 if not self.cata or not self.cata.modeleMetier : return
134 if self.nom == 'Consigne' : return None
135 if debug : print (self.definition.nomComplet())
136 if debug : print ('_______________ X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
137 if debug and self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
138 elif debug : print ('objPyxbDeConstruction', self.objPyxbDeConstruction)
140 if self.objPyxbDeConstruction != None :
141 self.objPyxb = self.objPyxbDeConstruction
142 self.maClasseModeleMetier =type(self.objPyxb)
143 self.objPyxbDeConstruction = None
144 if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union):
145 self.needFactory=True
146 self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
147 else : self.needFactory=False
149 self.monNomClasseModeleMetier ='T_'+self.nom
150 if hasattr(self.definition,'nomXML') and self.definition.nomXML != None : self.monNomClasseModeleMetier='T_'+self.definition.nomXML
151 if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) :
152 nomComplet=self.definition.nomComplet()
153 if nomComplet in list(self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier].keys()):
154 self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][nomComplet]
155 if debug : print ('Pour', self.nom, ' le type est ', self.monNomClasseModeleMetier)
156 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
158 if self.waitMatrice() :
159 #PNPN : Attention rien ne relie les objets listeObjPyxb a un objAccas
160 # 27/04 je ne sais pas si cela posera pb
162 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
163 self.maClasseModeleMetier_line=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_line')
164 if debug : print ('Matrice de type ', self.maClasseModeleMetier)
165 for v in self.valeur:
166 l=self.maClasseModeleMetier_line(v)
167 self.listeLines.append(l)
168 self.objPyxb=self.maClasseModeleMetier(*self.listeLines)
169 #if self.objPyxb !=None : self.objPyxb.objAccas=self
170 if debug : print ('Matrice ', self.nom, self.objPyxb)
172 if self.waitTuple() :
174 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
175 # if faut traiter l autre cas
177 if self.definition.max !=1 :
178 for v in self.valeur :
179 if debug : print ('je traite ', v)
181 for i in range(self.combienEltDsTuple()):
183 maClasseElt=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_n'+str(num))
184 listeConstruction.append(maClasseElt(v[i]))
185 self.objPyxb.append(self.maClasseModeleMetier(*listeConstruction))
186 if debug : print (self.objPyxb)
188 if self.waitChaineAvecBlancs() and self.definition.max > 1:
189 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
190 if debug : print (self.valeur)
191 if self.valeur != None and self.valeur != [] : self.objPyxb = self.maClasseModeleMetier(*self.valeur)
192 else :self.objPyxb = self.maClasseModeleMetier()
193 if debug : print ('X_MCSIMP', self.nom, self.objPyxb, )
194 if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
198 if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union):
199 if debug : print ('needFactory')
200 self.needFactory=True
201 self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
202 else : self.needFactory=False
204 if self.valeur != None :
205 if self.needFactory :
206 if self.definition.max > 1 :
208 # self.objPyxb=self.maClasseModeleMetier(self.valeur)
209 self.objPyxb=self.maClasseModeleMetierFactory(self.valeur)
210 else : self.objPyxb=self.maClasseModeleMetierFactory(self.valeur)
211 else : self.objPyxb=self.maClasseModeleMetier(self.valeur)
213 if self.needFactory : self.objPyxb=None
214 else : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False)
217 #if self.objPyxb !=None : self.objPyxb.objAccas=self
218 if debug : print ('X_MCSIMP', self.nom, self.objPyxb, )
219 if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
222 def setValeurObjPyxb(self,newVal, debug=True):
223 if not self.cata or not self.cata.modeleMetier : return
224 if debug : print (' ___________________________ dans setValeurObjPyxb MCSIMP ', self.nom, newVal)
225 if debug : print (' self.perePyxb = ', self.perePyxb.nom)
226 if debug : print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb)
227 if debug : print ('debut du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
229 #if newVal != None : nvlObj=self.maClasseModeleMetier(newVal)
231 if self.needFactory : nvlObj=self.maClasseModeleMetierFactory(newVal)
232 else : nvlObj=self.maClasseModeleMetier(newVal)
234 if self.needFactory : nvlObj =None
235 else : nvlObj=self.maClasseModeleMetier(_validate_constraints=False)
237 if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
239 if inspect.isclass(newVal) and issubclass(newVal,A_ASSD) :
241 setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
244 for i in self.perePyxb.objPyxb.orderedContent():
245 if i.elementDeclaration.id() == self.nom:
246 #if isinstance(i._Content__value, self.maClasseModeleMetier) :
247 self.perePyxb.objPyxb.orderedContent()[indice]=self.perePyxb.objPyxb.orderedContent()[-1]
248 del(self.perePyxb.objPyxb.orderedContent()[-1])
252 if not trouve : print ('Attention souci au changement de valeur de ', self.nom)
254 #self.objPyxb.objAccas=self
255 if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
260 class X_MCCOMPO(X_OBJECT) :
261 # -------------------------
263 def buildObjPyxb(self,mc_list, debug=False) :
264 if not self.cata or not self.cata.modeleMetier : return
266 #if self.nom == 'Scenario_data' : debug=1
267 if debug : print ('X_MCCOMPO', self.nom)
271 for objAccas in mc_list :
272 if objAccas.nature == 'MCBLOC' :
273 self.exploreBLOC(objAccas)
274 elif objAccas.nature == 'MCList' :
275 if objAccas[0].definition.max > 1 :
276 self.listArg.append(objAccas) # les MCList n ont pas objPyxb
277 self.dicoArg[objAccas.nom]=[]
278 for fils in objAccas :
280 self.dicoArg[objAccas.nom].append(fils.objPyxb)
282 objAccas[0].perePyxb=self
283 self.dicoArg[objAccas.nom]=objAccas[0].objPyxb
284 self.listArg.append(objAccas[0].objPyxb)
286 if objAccas.nom == 'Consigne' : continue
287 print ('______________', objAccas.nom, objAccas.objPyxb)
288 self.listArg.append(objAccas.objPyxb)
289 self.dicoArg[objAccas.nom]=objAccas.objPyxb
290 objAccas.perePyxb=self
292 if debug : print('X_MCCOMPO -- listArg ---',self.nom,self.listArg)
293 if debug : print('X_MCCOMPO -- dicoArg ---',self.nom,self.dicoArg)
296 self.monNomClasseModeleMetier='T_'+self.nom
297 if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) :
298 self.nomComplet=self.definition.nomComplet()
299 self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][self.nomComplet]
300 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
302 # PN : Ne doit-on pas tester avant
303 if self.objPyxbDeConstruction != None :
304 self.objPyxb = self.objPyxbDeConstruction
305 self.objPyxbDeConstruction = None
306 if debug : print ('je passe dans le if pour ', self.nom, self.objPyxb, self)
307 if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,self.objPyxb.orderedContent())
309 if debug : print (self.listArg)
310 if debug : print (self.maClasseModeleMetier)
311 # self.objPyxb=self.maClasseModeleMetier(*self.listArg)
312 self.objPyxb=self.maClasseModeleMetier(**self.dicoArg)
314 print ('debut de __________ new ordered content')
315 for o in self.objPyxb.orderedContent():
317 print ('value', o.value)
318 print ('type', type(o.value))
319 print ('id', id(o.value))
320 print ('fin __________ new ordered content')
321 print ('debut de __________ listArg')
322 for obj in self.listArg:
324 print ('type obj', type(obj))
325 print ('id(obj)', id(obj))
326 print ('fin __________ listArg')
329 if debug : print ('list Arg')
330 for obj in self.listArg:
333 print ('type obj', type(obj))
334 print ('id(obj)', id(obj))
336 # on teste le caractere pluriel
337 if isinstance(obj, list):
338 for c in self.objPyxb.orderedContent() :
339 if hasattr (c,'value') and c.value == obj :
340 newOrderedContent.append(c)
342 if (hasattr(obj, 'nature')) : # attention on a un object Accas et non un pyxb car les MCList n ont pas de objPyxb
343 max=obj[0].definition.max
346 #if not(issubclass(type(obj), pyxb.binding.basis.enumeration_mixin) ):
347 # newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] )
349 # newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:type(o.value), self.objPyxb.orderedContent())).index(type(obj))] )
350 # PN 22 sept 2020 . pourquoi pas toujours l id. le tyoe ne convient pas en cas d union d enum
351 newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] )
352 else : # element Pural
353 for c in self.objPyxb.orderedContent() :
354 if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(obj[0].objPyxb)): newOrderedContent.append(c)
356 for i in range(len(self.listArg)):
357 self.objPyxb.orderedContent()[i]=newOrderedContent[i]
359 if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb)
360 if debug : print ('X_MCCOMPO', self.listArg)
361 if debug : print ('X_MCCOMPO', newOrderedContent)
362 if debug : print ( 'X_MCCOMPO',self.objPyxb.orderedContent())
363 if debug : print ('fin buildObjetPyxb _______________________________________')
364 # assert(self.objPyxb.validateBinding())
367 def exploreBLOC(self,objAccas,debug=False):
368 if debug : print (' ds exploreBLOC', objAccas.nom)
370 for fils in objAccas.mcListe:
371 if fils.nature == 'MCBLOC' :
372 self.exploreBLOC(fils)
373 elif fils.nature == 'MCList' :
374 #print ('exploreBLOC des MCList', fils.nom)
375 self.dicoArg[fils.nom]=[]
376 if fils[0].definition.max > 1 :
377 #print ('ajout de ', fils)
378 self.listArg.append(fils) # les MCList n ont pas objPyxb
379 for objFils in fils :
380 objFils.perePyxb=self
381 self.dicoArg[fils.nom].append(objFils.objPyxb)
383 fils[0].perePyxb=self
384 self.dicoArg[fils.nom]=fils[0].objPyxb
385 self.listArg.append(fils[0].objPyxb)
387 if fils.nom == "Consigne" : continue
388 self.listArg.append(fils.objPyxb)
389 self.dicoArg[fils.nom]=fils.objPyxb
391 if debug : print (fils.nom ,' est un SIMP a pour pere Pyxb', self, self.nom)
392 if debug : print ('fin ds exploreBLOC', objAccas .nom)
397 class X_MCBLOC (X_MCCOMPO):
398 # --------------------------
399 def buildObjPyxb(self,mc_list,debug=False):
400 if not self.cata or not self.cata.modeleMetier : return
401 if debug : print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list, 'ne fait rien')
405 def addObjPyxb(self, indiceDsLeContenu, debug=False):
406 if not self.cata or not self.cata.modeleMetier : return
407 if debug : print ('X_MCBLOC addObjPyxb', self.nom, self, self.mcListe, indiceDsLeContenu)
408 rangDeLObjet=indiceDsLeContenu
409 for obj in self.mcListe:
410 obj.addObjPyxb( rangDeLObjet)
411 rangDeLObjet=rangDeLObjet+obj.longueurDsArbre()
413 def delObjPyxb(self, debug=False):
414 if not self.cata or not self.cata.modeleMetier : return
415 if debug : print ('X_MCBLOC delObjPyxb', self.nom, ' --------------------------')
416 for obj in self.mcListe:
418 if debug : print ('fin X_MCBLOC delObjPyxb --------------------------')
420 class X_MCLIST (X_MCCOMPO):
421 # --------------------------
423 def buildObjPyxb(self,mc_list, debug=False):
424 if debug : print ('X_MCLIST buildObjPyxb ne fait rien', self.nom, self, mc_list)
427 def addObjPyxb(self,indiceDsLeContenu, debug=False):
428 if debug : print ('X_MCLIST addObjPyxb', self.nom, indiceDsLeContenu)
429 rangDeLObjet=indiceDsLeContenu
430 for objFils in self :
431 objFils.addObjPyxb(rangDeLObjet)
432 rangDeLObjet= rangDeLObjet + 1
434 def delObjPyxb(self, debug=False):
435 if not self.cata or not self.cata.modeleMetier : return
436 if debug : print ('X_MCLIST delObjPyxb', self.nom, ' --------------------------')
439 if debug : print ('fin X_MCLIST delObjPyxb --------------------------')
442 class X_MCFACT (X_MCCOMPO):
443 # -------------------------
446 class X_ETAPE(X_MCCOMPO) :
447 # -------------------------
449 def metAJourNomASSD(self, nom,debug=False):
450 if not self.cata or not self.cata.modeleMetier : return
451 if debug : print ('X_ETAPE metAJourLesAttributs', self.nom, nom,' --------------------------')
452 self.objPyxb.sdName=nom
454 class X_JDC (X_MCCOMPO):
455 # ---------------------
459 if not self.cata or not self.cata.modeleMetier : return
460 #if hasattr(self.cata,'DicoNomTypeDifferentNomElt') : print ('jkllllllllllllllll')
461 if not(hasattr(self.cata,'DicoNomTypeDifferentNomElt')) : self.cata.DicoNomTypeDifferentNomElt={}
462 self.monNomClasseModeleMetier=self.code
463 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
464 self.objPyxb=self.maClasseModeleMetier()
465 #self.objPyxb.objAccas=self
466 pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.NEVER)
467 pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
468 pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
472 def enregistreEtapePyxb(self,etape,indice=0):
473 # ne fonctionne pas : a reecrire avec les fonctions addObjPyxb et ReconstruitPerePyxb
474 # ne contient pas indice pour l insant
475 # print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh')
476 # print ('enregistre ds ',self, etape.nom, 'indice = ', indice)
477 if not self.cata.modeleMetier : return
478 self.objPyxb.append(etape.objPyxb)
479 etape.perePyxb = self
481 #print (self.objPyxb.orderedContent())
482 #if indice != (len(self.objPyxb.orderedContent()) ) :
483 # tampon=self.objPyxb.orderedContent()[-1]
484 # for i in reversed(range(len(self.objPyxb.orderedContent()))):
485 # self.objPyxb.orderedContent()[i]=self.objPyxb.orderedContent()[i-1]
486 # if i == indice + 1 : break
487 # self.objPyxb.orderedContent()[indice]=tampon
489 #print (self.objPyxb.orderedContent())
491 # self.objPyxb.validateBinding()
492 #except pyxb.ValidationError as e:
495 def toXml(self,fichier=None, debug=False):
496 if debug : print ('ds to XML')
497 if not self.cata or not self.cata.modeleMetier : return
498 if debug : print (' to xml ***************',self.objPyxb,'***************',)
499 if debug : print (' to xml ***************',self,'***************',)
500 if debug : print (' to xml ***************',self.objPyxb.orderedContent(),'***************',)
501 if debug : print(self.objPyxb.toDOM().toprettyxml())
502 if debug : print(self.objPyxb.toxml())
503 return (self.objPyxb.toDOM().toprettyxml())
506 def analyseFromXML(self,debug=False):
507 print ("je suis ds analyseFromXML -- > appel ds analyseXML de I_JDC.py")
508 if self.procedure == "" : return
509 self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure)
510 if not hasattr(self.cata.modeleMetier,'AccasUserAssd'):
511 from Accas import UserASSD
512 self.cata.modeleMetier.AccasUserAssd=UserASSD
513 for contentObjEtape in self.objPyxb.orderedContent():
514 objEtape=contentObjEtape.value
515 objEtape.dictArgs=(self.pyxbToDict(objEtape))
516 objEtape.monNomClasseAccas=objEtape._ExpandedName.localName()
517 objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:]
518 # doute sur les 2 lignes suivantes : objEtape peut etre contentObjEtape 2juin20
519 objEtape.dictPyxb['objEnPyxb']=objEtape
520 objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb
521 if debug : print ('dicoPyxbDeConstruction', objEtape.dictArgs['dicoPyxbDeConstruction'])
522 maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
523 if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
524 if debug : print ('maClasseAccas ', maClasseAccas)
525 if debug : print ('objEtape ', objEtape , type(objEtape))
526 if debug : print ('nomClasseAccas ',objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
527 if debug : print ('_ExpandedName ', objEtape._ExpandedName, type(objEtape._ExpandedName))
528 if debug : print ('dictArgs ',objEtape.dictArgs)
529 if debug : print ('dictPyxb ',objEtape.dictPyxb)
530 # attention au call d Oper qui renomme l objet pyxb
531 if hasattr(objEtape,'sdName') :
532 if debug and hasattr(objEtape,'sdName') :print ('sdName',objEtape.sdName)
533 objAccasEtape=maClasseAccas(nomXML=objEtape.sdName, **(objEtape.dictArgs))
534 else : objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
535 if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
538 def pyxbToDict(self,objAAnalyser, debug=True):
539 # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
540 if objAAnalyser is None: return
541 if debug : print ('debut pour_____________________________ ',objAAnalyser)
545 # a revoir pour les matrices
548 if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
549 if debug : print ('je suis un MCSimple', objAAnalyser)
550 # traitement scalaire
551 objAAnalyser.dictPyxb=objAAnalyser
552 if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)):
553 if debug : print ('je suis un scalaire')
554 if isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssd) or isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssdMultiple):
555 if debug : print ('je suis un UserASSD')
556 laClassePyxbUserAssd=type(objAAnalyser)
557 return self.creeUserAssd(objAAnalyser,laClassePyxbUserAssd)
558 if isinstance(objAAnalyser, pyxb.binding.datatypes.boolean) : return bool(objAAnalyser)
559 if isinstance(objAAnalyser, str) : return str(objAAnalyser)
560 if isinstance(objAAnalyser, int) : return int(objAAnalyser)
561 if isinstance(objAAnalyser, float): return float(objAAnalyser)
562 if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin): return str(objAAnalyser)
565 if debug : print ('je suis une liste')
568 if len(objAAnalyser)>0:
569 if issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssdMultiple): estUnUserASSDorUserASSDMultiple = True
570 else : estUnUserASSDorUserASSDMultiple=False
571 else : estUnUserASSDorUserASSDMultiple=False
572 if debug : print ('estUnUserASSDorUserASSDMultiple', estUnUserASSDorUserASSDMultiple)
573 for obj in objAAnalyser :
574 if estUnUserASSDorUserASSDMultiple:
575 laClassePyxbUserAssd=obj.__class__
576 laListe.append(self.creeUserAssd(obj,laClassePyxbUserAssd))
577 elif isinstance(obj, str): laListe.append (str(obj))
578 elif isinstance(obj, int): laListe.append (int(obj))
579 elif isinstance(obj, float): laListe.append (float(obj))
580 elif isinstance(obj, pyxb.binding.basis.enumeration_mixin): laListe.append(str(obj))
581 else : laListe.append(obj)
583 # if debug : print ('je suis Plural')
584 # ou ? return objAAnalyser
585 #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,)
586 #pour une enum getattr(value dans le type)
587 # return pythonLiteral(ReferenceFacet(facet=value, **kw))
588 #print ('je suis un mot complexe')
589 # traitement FACT ou BLOC
590 # ------------------------
591 # il faut traiter les fact multiples
592 objAAnalyser.dictPyxb = {}
593 objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
594 #for expandedName, elementDeclaration in objAAnalyser._ElementMap.items():
595 # objPyxbName = expandedName.localName()
596 # objPyxbValue = getattr(objAAnalyser, objPyxbName)
597 for objEltContentFils in objAAnalyser.orderedContent():
598 objPyxbValue = objEltContentFils.value
599 objPyxbName = objEltContentFils.elementDeclaration.id()
600 elementDeclaration = objEltContentFils.elementDeclaration
601 #if objPyxbValue == None or objPyxbValue == [] : continue
602 if elementDeclaration.isPlural():
603 if objPyxbName not in list(dictArgs.keys()) : dictArgs[objPyxbName]=[]
604 if objPyxbName not in list(objAAnalyser.dictPyxb.keys()) : objAAnalyser.dictPyxb[objPyxbName]=[]
605 dictArgs[objPyxbName].append(self.pyxbToDict(objPyxbValue))
606 objAAnalyser.dictPyxb[objPyxbName].append(objPyxbValue.dictPyxb)
608 dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName))
609 objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb
610 # print ('ajout dans dictPyxb', objPyxbName, objPyxbValue.dictPyxb)
611 #print ('avec la valeur', 'de', objAAnalyser.dictPyxb[objPyxbName])
613 #print ("***********************************")
614 #print ('pyxbToDict fin pour ********** ', objAAnalyser)
615 #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
616 #print ('pyxbToDict fin pour ********** ', objAAnalyser)
617 #print ("***********************************")
620 #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i]))
621 #print ('fin pour ',objAAnalyser)
624 def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd,debug=True):
627 if debug : print ('creeUserAssd ', objAAnalyser, ' ',laClassePyxbUserAssd)
628 leTypeIntermediaire=laClassePyxbUserAssd.XsdSuperType()
629 if debug : print ('leTypeIntermediaire ', leTypeIntermediaire)
630 if debug : print ('leTypeIntermediaire ', leTypeIntermediaire.XsdSuperType())
631 if leTypeIntermediaire.__name__[-2:]== '_C' : enCreation = True
632 elif leTypeIntermediaire.__name__[-2:] != '_U' : print ('pb avec', laClassePyxbUserAssd); return None #exit()
633 nomClasseAccasUserAssd=leTypeIntermediaire.XsdSuperType().__name__
634 if debug : print ('nomClasseAccasUserAssd', nomClasseAccasUserAssd)
635 laClasseAccas=getattr(self.cata,nomClasseAccasUserAssd)
636 print (laClasseAccas)
638 if str(objAAnalyser) in self.g_context.keys():return self.g_context[str(objAAnalyser)]
641 self.g_context[str(objAAnalyser)]=obj
643 if str(objAAnalyser) in self.g_context.keys():
644 if isinstance(self.g_context[str(objAAnalyser)],laClasseAccas):
645 return self.g_context[str(objAAnalyser)]
647 nvlObj=laClasseAccas()
648 oldObj=self.g_context[str(objAAnalyser)]
649 nvlObj.transfere(oldObj)
650 self.g_context[str(objAAnalyser)]=nvlObj
654 self.g_context[str(objAAnalyser)]=obj
657 # def analyseContent(self,objAAnalyser):
658 # objAAnalyser.dictArgs={}
659 # for objContenu in objAAnalyser.content():
660 # #print ('j analyse ', objContenu)
661 # objContenu.monNomClasseModeleMetier=str(objContenu.__class__).split('.')[-1]
662 # objContenu.monNomClasseAccas=objContenu.monNomClasseModeleMetier[2:-2]
663 # #maClasseAccas=classeAccasPere.entites[objContenu.monNomClasseAccas]
664 # if objContenu._IsSimpleTypeContent():
665 # print (objContenu.monNomClasseAccas,objContenu.pythonLiteral())
666 # print (objContenu.monNomClasseAccas,objContenu.xsdLiteral())
667 # #chaine=objContenu.pythonLiteral().split('(')[1].split(')')[0]
668 # print (dir(objContenu))
669 # objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=None
670 # #objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.pythonLiteral()
672 # self.analyseContent(objContenu)
673 # objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.dictArgs
674 #print ( '________________')
675 #print (objAAnalyser.monNomClasseAccas)
676 #for i in objAAnalyser.dictArgs : print (i, objAAnalyser.dictArgs[i])
677 #print ( '________________')
681 if __name__ == "__main__":