2 # -*- coding: utf-8 -*-
5 #import raw.efficas as efficas
8 sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
12 import pyxb.binding.basis
13 #import pyxb.utils.utility
14 #import pyxb.utils.domutils
19 def deletePyxbObject(self):
20 print ('----------- deletePyxbObject', self.nom)
24 for i in self.perePyxb.objPyxb.orderedContent():
25 if id(self.objPyxb) == id(i._Content__value) : trouve = True ;break
27 if not trouve : print ('objet pas trouve')
28 print (self.perePyxb.objPyxb.description)
29 del self.perePyxb.objPyxb.__dict__[self.nom]
30 print (self.perePyxb.objPyxb.__delattr__)
31 #delattr(self.perePyxb.objPyxb,self.nom)
34 print ('delattr', self.perePyxb.objPyxb,self.nom)
35 del self.perePyxb.objPyxb.orderedContent()[indice]
38 class X_MCSIMP(X_OBJECT):
39 # -----------------------
41 def buildObjPyxb(self) :
42 # self.valeur tient compte de la valeur par defaut
43 # utiliser getValeur ? expression numpy
44 if not self.cata or not self.cata.modeleMetier : return
45 #print ('X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
46 #if self.nom == 'diameter' :
47 # traceback.print_stack()
48 # print ('****************************************************')
49 # print ('objPyxbDeConstruction', self.objPyxbDeConstruction)
50 #if self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
51 if self.objPyxbDeConstruction != None :
52 self.objPyxb = self.objPyxbDeConstruction
53 self.maClasseModeleMetier =type(self.objPyxb)
54 #print (self.maClasseModeleMetier)
55 self.objPyxbDeConstruction = None
57 self.monNomClasseModeleMetier='T_'+self.nom
58 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
59 #print (self.maClasseModeleMetier)
61 #print (type(self.valeur))
62 if self.valeur != None : self.objPyxb=self.maClasseModeleMetier(self.valeur)
63 elif self.definition.into != None and 'TXM' in self.definition.type : self.objPyxb = None
64 else : self.objPyxb=self.maClasseModeleMetier();
66 #print ('X_MCSIMP', self.nom, self.objPyxb)
67 #print ('fin X_MCSIMP', self.objPyxb, self.nom,self)
70 def setValeurObjPyxb(self,newVal):
71 print ('dans setValeurObjPyxb MCSIMP')
72 if not self.cata or not self.cata.modeleMetier : return
73 # print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb)
74 if newVal != None : nvlObj=self.maClasseModeleMetier(newVal)
75 else : nvlObj=self.maClasseModeleMetier()
77 setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
78 print ('setattr', self.perePyxb.objPyxb,self.nom)
81 for i in self.perePyxb.objPyxb.orderedContent():
82 if isinstance(i._Content__value, self.maClasseModeleMetier) :
83 self.perePyxb.objPyxb.orderedContent()[indice]=self.perePyxb.objPyxb.orderedContent()[-1]
84 del(self.perePyxb.objPyxb.orderedContent()[-1])
88 if not trouve : print ('Attention souci au changement de valeur de ', self.nom)
90 print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiii', nvlObj, id(nvlObj))
91 #for i in self.perePyxb.objPyxb.orderedContent():
92 # print ('ds le for pour i')
93 # print (i._Content__value)
94 # print (id(i._Content__value))
95 # print (type((i._Content__value)))
96 # if id(i._Content__value) == id(self.objPyxb) : break
99 #maValeur = getattr(self.perePyxb.objPyxb, self.nom)
100 #print ('je change', indexOC)
101 #if isinstance(maValeur, pyxb.binding.basis.simpleTypeDefinition):
103 # print ('jkjkljkljklj')
104 # setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
105 # self.perePyxb.objPyxb.orderedContent()[indexOC]=self.perePyxb.objPyxb.orderedContent()[-1]
106 # del(self.perePyxb.objPyxb.orderedContent()[-1])
107 #print ('apres',self.nom, self.perePyxb.objPyxb.orderedContent())
113 # if id(i) == id(self.objPyxb) :trouve = True ; break
115 # maValeur[index]=nvlObj
116 # self.perePyxb.objPyxb.orderedContent()[indexOC]._Content__value=nvlObj
118 # if not trouve : print (self.nom , 'pas trouve')
120 #print ('arret programme'); exit()
122 #print ('id objPyxb',id(self.objPyxb))
123 #print ('id objPyxb[0]',id(self.objPyxb[0]))
124 #print ('id elt ', id(self.objPyxb._element), self.objPyxb._element, type(self.objPyxb._element), type(self.objPyxb._element()))
125 #print (' perePyxb _ElementMap')
126 #print (self.perePyxb.objPyxb._ElementMap)
128 #for i in self.perePyxb.objPyxb._ElementMap.keys() :
129 # print (id(i), ' ', id(self.perePyxb.objPyxb._ElementMap[i]))
130 #print (dir(self.perePyxb.objPyxb._ElementMap[i]))
131 # print (id(self.perePyxb.objPyxb._ElementMap[i]))
133 #print (' objPyxb monBinding id')
134 #monBinding = getattr(self.perePyxb.objPyxb, self.nom)
135 #for i in monBinding : print id(i)
136 #print (' perePyxb orderedContent')
137 #for i in self.perePyxb.objPyxb.orderedContent():
138 # print id(i._Content__value)
139 # print (i._Content__value, type(i._Content__value))
140 #print (' perePyxb orderedContent')
141 #for i in self.perePyxb.objPyxb.content(): print id(i)
143 #print (self.perePyxb.objPyxb.orderedContent())
147 def addPyxbObject(self, indiceDsLeContenu):
148 if not self.cata or not self.cata.modeleMetier : return
150 # adherence Accas sur le parent
152 while (parent.isBLOC() ): parent=parent.parent
155 self.monNomClasseModeleMetier='T_'+self.nom
156 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
157 nvlObj=self.maClasseModeleMetier()
158 print ('setattr', self.perePyxb.objPyxb,self.nom)
159 setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
160 tampon=self.perePyxb.objPyxb.orderedContent()[-1]
161 self.objPyxb = nvlObj
163 longueur=len(self.perePyxb.objPyxb.orderedContent())
164 for i in reversed(range(longueur)):
165 self.perePyxb.objPyxb.orderedContent()[i]=self.perePyxb.objPyxb.orderedContent()[i-1]
166 if i == indiceDsLeContenu + 1 : break
167 self.perePyxb.objPyxb.orderedContent()[indiceDsLeContenu]=tampon
170 #for i in self.perePyxb.objPyxb.orderedContent() :
171 # print (i._Content__value, type(i._Content__value))
172 #print ('----------------')
174 #print self.perePyxb.objPyxb.orderedContent()
175 #for i in self.perePyxb.objPyxb.orderedContent():
176 # print ('valeur de ', i)
177 # print (i._Content__value)
178 # print (type(i._Content__value))
179 # if isinstance(i._Content__value, self.maClasseModeleMetier) :
180 # print dir(i._Content__value)
181 # self.objPyxb = i._Content__value
182 # setattr(self.perePyxb.objPyxb, self.nom, nvlObj)
183 # self.perePyxb.objPyxb.orderedContent()[indexOC]=self.perePyxb.objPyxb.orderedContent()[-1]
184 # del(self.perePyxb.objPyxb.orderedContent()[-1])
188 class X_MCCOMPO(X_OBJECT) :
189 # -------------------------
191 def buildObjPyxb(self,mc_list) :
192 #print ('________________________________________________')
193 #print ('X_MCCOMPO buildObjPyxb', self.nom, self, mc_list)
194 if not self.cata or not self.cata.modeleMetier : return
197 for objAccas in mc_list :
198 if objAccas.nature == 'MCBLOC' :
199 self.exploreBLOC(objAccas)
200 elif objAccas.nature == 'MCList' :
201 for fils in objAccas :
203 self.listArg.append(fils.objPyxb)
205 self.listArg.append(objAccas.objPyxb)
206 objAccas.perePyxb=self
207 print (objAccas.nom ,' a pour pere Pyxb', self, self.nom)
209 self.monNomClasseModeleMetier='T_'+self.nom
210 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
211 if self.objPyxbDeConstruction != None :
212 self.objPyxb = self.objPyxbDeConstruction
213 self.objPyxbDeConstruction = None
214 #print ('je passe dans le if pour ', self.nom, self.objPyxb, self)
216 self.objPyxb=self.maClasseModeleMetier(*self.listArg)
217 #print ('Fin __________ ', self.nom, self.objPyxb)
218 #print ('X_MCCOMPO', self.nom, self.objPyxb)
219 #print ('_______________________________________')
221 def deletePyxbObject(self):
222 print ('******************************************')
223 print ('je passe ds deletePyxbObject pour ', self, self.nom)
224 print (self.perePyxb)
226 print ('******************************************')
228 def exploreBLOC(self,objAccas):
230 for fils in objAccas.mcListe:
231 if fils.nature == 'MCBLOC' :
232 self.exploreBLOC(fils)
233 elif fils.nature == 'MCList' :
234 for objFils in fils :
236 self.listArg.append(fils.objPyxb)
237 #print (fils.nom ,' a pour pere Pyxb', self, self.nom)
239 self.listArg.append(fils.objPyxb)
241 #print (fils.nom ,' a pour pere Pyxb', self, self.nom)
246 class X_MCBLOC (X_MCCOMPO):
247 # --------------------------
248 def buildObjPyxb(self,mc_list):
249 if not self.cata or not self.cata.modeleMetier : return
250 # mise a none ? le bloc n a pas d existence en pyxb
252 #print ('_______________________________________')
253 #print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list)
254 # on rattache ses fils au bloc mais leur pere sera ensuite le MCCOMPO qui contient le bloc
255 # Pas sur d en avoir besoin du filsPyxb
258 for objAccas in mc_list :
259 self.filsPyxb.append(objAccas.objPyxb)
260 #print (self.filsPyxb)
261 #print ('Fin ', self.nom, self.objPyxb)
262 #print ('_______________________________________')
267 class X_MCLIST (X_MCCOMPO):
268 # --------------------------
270 def buildObjPyxb(self,mc_list):
271 #print ('__________________________________________________________________')
272 #print ('X_MCLIST buildObjPyxb traite ds X_MCLIST', self.nom, self)
273 #print ('on ne fait rien pour les MCLISTs, cela sera fait dans chaque MCFACT')
274 #print ('__________________________________________________________________')
277 # detruire la methode suivante
278 #def build2ObjPyxb(self,mc_list):
279 # print ('_______________________________________')
280 # print ('X_MCLIST buildObjPyxb traite ds X_MCLIST', self.nom, self)
281 # if not self.cata.modeleMetier : return
282 # self.monNomClasseModeleMetier='T_'+self.nom
283 # self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
285 # MCList est une liste
286 # for nbDeSequence in self :
287 # for objAccas in nbDeSequence.mcListe :
288 #print (type (objAccas))
289 #print (objAccas.nom, objAccas.objPyxb, type(objAccas.objPyxb))
290 #print ( type (objAccas.objPyxb) == list )
291 #if type (objAccas.objPyxb) == list :
293 # for fils in objAccas.objPyxb :
294 # listArg.append(fils.objPyxb)
296 #print (fils.nom ,' a pour pere Pyxb', self, self.nom)
298 # listArg.append(objAccas.objPyxb)
299 # objAccas.perePyxb=self
300 #print (objAccas.nom ,' a pour pere Pyxb', self, self.nom)
301 #listArg.append(objAccas.objPyxb)
302 #objAccas.perePyxb=self
303 #print ( objAccas.nom, ' a pour perepyxb ' , objAccas.perePyxb.nom)
305 # print ('X_MCLIST', self.nom, self, listArg)
306 # self.objPyxb=self.maClasseModeleMetier(*listArg)
307 # print ('fin buildObjPyxb traite ds X_MCLIST', self.nom, self, self.objPyxb)
308 # print ('_______________________________________')
310 class X_MCFACT (X_MCCOMPO):
311 # -------------------------
312 # on gere au niveau du MCCOMPO
316 class X_JDC (X_MCCOMPO):
317 # ---------------------
320 #print ('_______________________________________')
321 #print ('X_JDC buildObjPyxb', self)
322 if not self.cata or not self.cata.modeleMetier : return
323 self.monNomClasseModeleMetier=self.code
324 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
325 self.objPyxb=self.maClasseModeleMetier()
326 pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.ALWAYS)
327 pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
328 pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
329 #print ('fin buildObjPyxb _______________________________________')
331 def enregistreEtapePyxb(self,etape):
332 # OK seulement si sequence (choice ? ...)
333 if not self.cata.modeleMetier : return
334 print ('enregistreEtapePyxb' , etape)
335 self.objPyxb.append(etape.objPyxb)
336 etape.perePyxb = self
340 if not self.cata.modeleMetier : return
341 print ('***************',self.objPyxb,'***************',)
342 print ('***************',self.objPyxb.orderedContent(),'***************',)
343 print(self.objPyxb.toDOM().toprettyxml())
344 print(self.objPyxb.toxml())
345 return (self.objPyxb.toDOM().toprettyxml())
348 def analyseFromXML(self):
349 print ("je suis ds analyseFromXML -- > appel ds analyse de I_JDC.py")
350 if self.procedure == "" : return
351 self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure)
352 for objEtape in self.objPyxb.content():
353 objEtape.dictArgs= (self.pyxbToDict(objEtape))
354 objEtape.monNomClasseAccas=objEtape._ExpandedName.localName()
355 objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:]
356 objEtape.dictPyxb['objEnPyxb']=objEtape
357 objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb
358 maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
359 objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
360 # attention objAccasEtape = None normal (cf buildSd)
362 #print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
363 #print (objEtape , type(objEtape))
364 #print (objEtape.dictPyxb)
365 #print (maClasseAccas)
366 #print (objAccasEtape)
368 #print (objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
369 #print (objEtape._ExpandedName, type(objEtape._ExpandedName))
370 #print (objEtape.dictPyxb[u'experience'])
371 #print (objEtape.dictArgs)
372 #print (objEtape.dictPyxb)
373 #print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
377 def pyxbToDict(self,objAAnalyser):
378 # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
379 # faudrait - il travailler sur les types des objets ?
380 # c est a revoir -> fonction cast a prevoir ds les 2 sens
381 if objAAnalyser is None: return
382 #print ('debut pour ',objAAnalyser)
384 if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
385 objAAnalyser.dictPyxb=objAAnalyser
386 #print (objAAnalyser.dictPyxb , type(objAAnalyser.dictPyxb))
387 if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin): return str(objAAnalyser)
388 if isinstance(objAAnalyser, types.StringTypes): return str(objAAnalyser)
389 if isinstance(objAAnalyser, types.FloatType): return float(objAAnalyser)
390 if isinstance(objAAnalyser, (types.IntType, types.LongType)): return int(objAAnalyser)
391 #if isinstance(objAAnalyser, (types.NoneType, types.BooleanType, types.FloatType, types.IntType, types.LongType)):
392 return repr(objAAnalyser)
393 # ou ? return objAAnalyser
394 #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,)
395 #pour une enum getattr(value dans le type)
396 # return pythonLiteral(ReferenceFacet(facet=value, **kw))
397 objAAnalyser.dictPyxb = {}
398 for expandedName, elementDeclaration in objAAnalyser._ElementMap.items():
399 objPyxbName = expandedName.localName()
400 objPyxbValue = getattr(objAAnalyser, objPyxbName)
401 if objPyxbValue == None or objPyxbValue == [] : continue
402 if elementDeclaration.isPlural():
403 dictArgs[objPyxbName] = []
404 #objAAnalyser.dictPyxb[objPyxbName]={}
405 objAAnalyser.dictPyxb[objPyxbName]=[]
406 #objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
407 for objPyxb in objPyxbValue :
408 #print ('-------------',objPyxb)
409 dictArgs[objPyxbName].append(self.pyxbToDict(objPyxb))
410 objPyxb.dictPyxb['objEnPyxb'] = objPyxb
411 objAAnalyser.dictPyxb[objPyxbName].append(objPyxb.dictPyxb)
413 dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName))
414 #print ('ajout ds dico de ', objAAnalyser , 'de', objPyxbName, objPyxbValue)
415 objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb
416 #print ('ajout ds dico de ', objPyxbValue.dictPyxb, 'de', objPyxbName)
417 objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
418 #print ("***********************************")
419 #print ('pyxbToDict fin pour ********** ', objAAnalyser)
420 #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
421 #print ('pyxbToDict fin pour ********** ', objAAnalyser)
422 #print ("***********************************")
425 #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i]))
426 #print ('fin pour ',objAAnalyser)
430 # def analyseContent(self,objAAnalyser):
431 # objAAnalyser.dictArgs={}
432 # for objContenu in objAAnalyser.content():
433 # #print ('j analyse ', objContenu)
434 # objContenu.monNomClasseModeleMetier=str(objContenu.__class__).split('.')[-1]
435 # objContenu.monNomClasseAccas=objContenu.monNomClasseModeleMetier[2:-2]
436 # #maClasseAccas=classeAccasPere.entites[objContenu.monNomClasseAccas]
437 # if objContenu._IsSimpleTypeContent():
438 # print (objContenu.monNomClasseAccas,objContenu.pythonLiteral())
439 # print (objContenu.monNomClasseAccas,objContenu.xsdLiteral())
440 # #chaine=objContenu.pythonLiteral().split('(')[1].split(')')[0]
441 # print (dir(objContenu))
442 # objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=None
443 # #objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.pythonLiteral()
445 # self.analyseContent(objContenu)
446 # objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.dictArgs
447 #print ( '________________')
448 #print (objAAnalyser.monNomClasseAccas)
449 #for i in objAAnalyser.dictArgs : print (i, objAAnalyser.dictArgs[i])
450 #print ( '________________')
454 if __name__ == "__main__":