2 # -*- coding: utf-8 -*-
5 #import raw.efficas as efficas
8 sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
13 import pyxb.binding.basis
16 #import pyxb.utils.utility
17 #import pyxb.utils.domutils
22 def deletePyxbObject(self):
23 if not self.cata or not self.cata.modeleMetier : return
24 print ('----------- deletePyxbObject', self.nom)
27 for i in self.perePyxb.objPyxb.orderedContent():
28 if id(self.objPyxb) == id(i._Content__value) : trouve = True ;break
30 if not trouve : print ('objet pas trouve')
31 print (self.perePyxb.objPyxb.description)
32 del self.perePyxb.objPyxb.__dict__[self.nom]
33 print (self.perePyxb.objPyxb.__delattr__)
34 #delattr(self.perePyxb.objPyxb,self.nom)
37 print ('delattr', self.perePyxb.objPyxb,self.nom)
38 del self.perePyxb.objPyxb.orderedContent()[indice]
41 class X_MCSIMP(X_OBJECT):
42 # -----------------------
44 def buildObjPyxb(self) :
45 # self.valeur tient compte de la valeur par defaut
46 # utiliser getValeur ? expression numpy
47 if not self.cata or not self.cata.modeleMetier : return
48 #print ('X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
49 #if self.nom == 'diameter' :
50 # traceback.print_stack()
51 # print ('****************************************************')
52 # print ('objPyxbDeConstruction', self.objPyxbDeConstruction)
53 #if self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
54 if self.objPyxbDeConstruction != None :
55 self.objPyxb = self.objPyxbDeConstruction
56 self.maClasseModeleMetier =type(self.objPyxb)
57 #print (self.maClasseModeleMetier)
58 self.objPyxbDeConstruction = None
60 self.monNomClasseModeleMetier='T_'+self.nom
61 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
62 #print (self.maClasseModeleMetier)
64 #print (type(self.valeur))
65 if self.valeur != None : self.objPyxb=self.maClasseModeleMetier(self.valeur)
66 elif self.definition.into != None and 'TXM' in self.definition.type : self.objPyxb = None
67 else : self.objPyxb=self.maClasseModeleMetier();
69 #print ('X_MCSIMP', self.nom, self.objPyxb)
70 #print ('fin X_MCSIMP', self.objPyxb, self.nom,self)
73 def setValeurObjPyxb(self,newVal):
74 if not self.cata or not self.cata.modeleMetier : return
75 print ('dans setValeurObjPyxb MCSIMP')
76 # print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb)
77 if newVal != None : nvlObj=self.maClasseModeleMetier(newVal)
78 else : nvlObj=self.maClasseModeleMetier()
80 setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
81 print ('setattr', self.perePyxb.objPyxb,self.nom)
84 for i in self.perePyxb.objPyxb.orderedContent():
85 if isinstance(i._Content__value, self.maClasseModeleMetier) :
86 self.perePyxb.objPyxb.orderedContent()[indice]=self.perePyxb.objPyxb.orderedContent()[-1]
87 del(self.perePyxb.objPyxb.orderedContent()[-1])
91 if not trouve : print ('Attention souci au changement de valeur de ', self.nom)
93 print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiii', nvlObj, id(nvlObj))
94 #for i in self.perePyxb.objPyxb.orderedContent():
95 # print ('ds le for pour i')
96 # print (i._Content__value)
97 # print (id(i._Content__value))
98 # print (type((i._Content__value)))
99 # if id(i._Content__value) == id(self.objPyxb) : break
102 #maValeur = getattr(self.perePyxb.objPyxb, self.nom)
103 #print ('je change', indexOC)
104 #if isinstance(maValeur, pyxb.binding.basis.simpleTypeDefinition):
106 # print ('jkjkljkljklj')
107 # setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
108 # self.perePyxb.objPyxb.orderedContent()[indexOC]=self.perePyxb.objPyxb.orderedContent()[-1]
109 # del(self.perePyxb.objPyxb.orderedContent()[-1])
110 #print ('apres',self.nom, self.perePyxb.objPyxb.orderedContent())
116 # if id(i) == id(self.objPyxb) :trouve = True ; break
118 # maValeur[index]=nvlObj
119 # self.perePyxb.objPyxb.orderedContent()[indexOC]._Content__value=nvlObj
121 # if not trouve : print (self.nom , 'pas trouve')
123 #print ('arret programme'); exit()
125 #print ('id objPyxb',id(self.objPyxb))
126 #print ('id objPyxb[0]',id(self.objPyxb[0]))
127 #print ('id elt ', id(self.objPyxb._element), self.objPyxb._element, type(self.objPyxb._element), type(self.objPyxb._element()))
128 #print (' perePyxb _ElementMap')
129 #print (self.perePyxb.objPyxb._ElementMap)
131 #for i in self.perePyxb.objPyxb._ElementMap.keys() :
132 # print (id(i), ' ', id(self.perePyxb.objPyxb._ElementMap[i]))
133 #print (dir(self.perePyxb.objPyxb._ElementMap[i]))
134 # print (id(self.perePyxb.objPyxb._ElementMap[i]))
136 #print (' objPyxb monBinding id')
137 #monBinding = getattr(self.perePyxb.objPyxb, self.nom)
138 #for i in monBinding : print id(i)
139 #print (' perePyxb orderedContent')
140 #for i in self.perePyxb.objPyxb.orderedContent():
141 # print id(i._Content__value)
142 # print (i._Content__value, type(i._Content__value))
143 #print (' perePyxb orderedContent')
144 #for i in self.perePyxb.objPyxb.content(): print id(i)
146 #print (self.perePyxb.objPyxb.orderedContent())
150 def addPyxbObject(self, indiceDsLeContenu):
151 if not self.cata or not self.cata.modeleMetier : return
153 # adherence Accas sur le parent
155 while (parent.isBLOC() ): parent=parent.parent
158 self.monNomClasseModeleMetier='T_'+self.nom
159 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
160 nvlObj=self.maClasseModeleMetier()
161 print ('setattr', self.perePyxb.objPyxb,self.nom)
162 setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
163 tampon=self.perePyxb.objPyxb.orderedContent()[-1]
164 self.objPyxb = nvlObj
166 longueur=len(self.perePyxb.objPyxb.orderedContent())
167 for i in reversed(range(longueur)):
168 self.perePyxb.objPyxb.orderedContent()[i]=self.perePyxb.objPyxb.orderedContent()[i-1]
169 if i == indiceDsLeContenu + 1 : break
170 self.perePyxb.objPyxb.orderedContent()[indiceDsLeContenu]=tampon
173 #for i in self.perePyxb.objPyxb.orderedContent() :
174 # print (i._Content__value, type(i._Content__value))
175 #print ('----------------')
177 #print self.perePyxb.objPyxb.orderedContent()
178 #for i in self.perePyxb.objPyxb.orderedContent():
179 # print ('valeur de ', i)
180 # print (i._Content__value)
181 # print (type(i._Content__value))
182 # if isinstance(i._Content__value, self.maClasseModeleMetier) :
183 # print dir(i._Content__value)
184 # self.objPyxb = i._Content__value
185 # setattr(self.perePyxb.objPyxb, self.nom, nvlObj)
186 # self.perePyxb.objPyxb.orderedContent()[indexOC]=self.perePyxb.objPyxb.orderedContent()[-1]
187 # del(self.perePyxb.objPyxb.orderedContent()[-1])
191 class X_MCCOMPO(X_OBJECT) :
192 # -------------------------
194 def buildObjPyxb(self,mc_list) :
195 #print ('________________________________________________')
196 #print ('X_MCCOMPO buildObjPyxb', self.nom, self, mc_list)
197 if not self.cata or not self.cata.modeleMetier : return
200 for objAccas in mc_list :
201 if objAccas.nature == 'MCBLOC' :
202 self.exploreBLOC(objAccas)
203 elif objAccas.nature == 'MCList' :
204 for fils in objAccas :
206 self.listArg.append(fils.objPyxb)
208 self.listArg.append(objAccas.objPyxb)
209 objAccas.perePyxb=self
210 print (objAccas.nom ,' a pour pere Pyxb', self, self.nom)
212 self.monNomClasseModeleMetier='T_'+self.nom
213 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
214 if self.objPyxbDeConstruction != None :
215 self.objPyxb = self.objPyxbDeConstruction
216 self.objPyxbDeConstruction = None
217 #print ('je passe dans le if pour ', self.nom, self.objPyxb, self)
219 self.objPyxb=self.maClasseModeleMetier(*self.listArg)
220 #print ('Fin __________ ', self.nom, self.objPyxb)
221 #print ('X_MCCOMPO', self.nom, self.objPyxb)
222 #print ('_______________________________________')
224 def deletePyxbObject(self):
225 if not self.cata or not self.cata.modeleMetier : return
226 print ('******************************************')
227 print ('je passe ds deletePyxbObject pour ', self, self.nom)
228 print (self.perePyxb)
230 print ('******************************************')
232 def exploreBLOC(self,objAccas):
233 if not self.cata or not self.cata.modeleMetier : return
235 for fils in objAccas.mcListe:
236 if fils.nature == 'MCBLOC' :
237 self.exploreBLOC(fils)
238 elif fils.nature == 'MCList' :
239 for objFils in fils :
241 self.listArg.append(fils.objPyxb)
242 #print (fils.nom ,' a pour pere Pyxb', self, self.nom)
244 self.listArg.append(fils.objPyxb)
246 #print (fils.nom ,' a pour pere Pyxb', self, self.nom)
251 class X_MCBLOC (X_MCCOMPO):
252 # --------------------------
253 def buildObjPyxb(self,mc_list):
254 if not self.cata or not self.cata.modeleMetier : return
255 # mise a none ? le bloc n a pas d existence en pyxb
257 #print ('_______________________________________')
258 #print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list)
259 # on rattache ses fils au bloc mais leur pere sera ensuite le MCCOMPO qui contient le bloc
260 # Pas sur d en avoir besoin du filsPyxb
263 for objAccas in mc_list :
264 self.filsPyxb.append(objAccas.objPyxb)
265 #print (self.filsPyxb)
266 #print ('Fin ', self.nom, self.objPyxb)
267 #print ('_______________________________________')
272 class X_MCLIST (X_MCCOMPO):
273 # --------------------------
275 def buildObjPyxb(self,mc_list):
276 #print ('__________________________________________________________________')
277 #print ('X_MCLIST buildObjPyxb traite ds X_MCLIST', self.nom, self)
278 #print ('on ne fait rien pour les MCLISTs, cela sera fait dans chaque MCFACT')
279 #print ('__________________________________________________________________')
283 class X_MCFACT (X_MCCOMPO):
284 # -------------------------
285 # on gere au niveau du MCCOMPO
289 class X_JDC (X_MCCOMPO):
290 # ---------------------
293 #print ('_______________________________________')
294 #print ('X_JDC buildObjPyxb', self)
295 if not self.cata or not self.cata.modeleMetier : return
296 self.monNomClasseModeleMetier=self.code
297 self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
298 self.objPyxb=self.maClasseModeleMetier()
299 pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.ALWAYS)
300 pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
301 pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
302 #print ('fin buildObjPyxb _______________________________________')
304 def enregistreEtapePyxb(self,etape):
305 # OK seulement si sequence (choice ? ...)
306 if not self.cata or not self.cata.modeleMetier : return
307 print ('enregistreEtapePyxb' , etape)
308 self.objPyxb.append(etape.objPyxb)
309 etape.perePyxb = self
313 if not self.cata or not self.cata.modeleMetier : return
314 print ('***************',self.objPyxb,'***************',)
315 print ('***************',self.objPyxb.orderedContent(),'***************',)
316 print(self.objPyxb.toDOM().toprettyxml())
317 print(self.objPyxb.toxml())
318 return (self.objPyxb.toDOM().toprettyxml())
321 def analyseFromXML(self):
322 print ("je suis ds analyseFromXML -- > appel ds analyse de I_JDC.py")
323 if not self.cata or not self.cata.modeleMetier : return
324 if self.procedure == "" : return
325 self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure)
326 for objEtape in self.objPyxb.content():
327 objEtape.dictArgs= (self.pyxbToDict(objEtape))
328 objEtape.monNomClasseAccas=objEtape._ExpandedName.localName()
329 objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:]
330 objEtape.dictPyxb['objEnPyxb']=objEtape
331 objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb
332 maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
333 objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
334 # attention objAccasEtape = None normal (cf buildSd)
336 #print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
337 #print (objEtape , type(objEtape))
338 #print (objEtape.dictPyxb)
339 #print (maClasseAccas)
340 #print (objAccasEtape)
342 #print (objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
343 #print (objEtape._ExpandedName, type(objEtape._ExpandedName))
344 #print (objEtape.dictPyxb[u'experience'])
345 #print (objEtape.dictArgs)
346 #print (objEtape.dictPyxb)
347 #print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
351 def pyxbToDict(self,objAAnalyser):
352 # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
353 # faudrait - il travailler sur les types des objets ?
354 # c est a revoir -> fonction cast a prevoir ds les 2 sens
355 if not self.cata or not self.cata.modeleMetier : return
356 if objAAnalyser is None: return
357 #print ('debut pour ',objAAnalyser)
359 if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
360 objAAnalyser.dictPyxb=objAAnalyser
361 #print (objAAnalyser.dictPyxb , type(objAAnalyser.dictPyxb))
362 if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin): return str(objAAnalyser)
363 if isinstance(objAAnalyser, types.StringTypes): return str(objAAnalyser)
364 if isinstance(objAAnalyser, types.FloatType): return float(objAAnalyser)
365 if isinstance(objAAnalyser, (types.IntType, types.LongType)): return int(objAAnalyser)
366 #if isinstance(objAAnalyser, (types.NoneType, types.BooleanType, types.FloatType, types.IntType, types.LongType)):
367 return repr(objAAnalyser)
368 # ou ? return objAAnalyser
369 #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,)
370 #pour une enum getattr(value dans le type)
371 # return pythonLiteral(ReferenceFacet(facet=value, **kw))
372 objAAnalyser.dictPyxb = {}
373 for expandedName, elementDeclaration in objAAnalyser._ElementMap.items():
374 objPyxbName = expandedName.localName()
375 objPyxbValue = getattr(objAAnalyser, objPyxbName)
376 if objPyxbValue == None or objPyxbValue == [] : continue
377 if elementDeclaration.isPlural():
378 dictArgs[objPyxbName] = []
379 #objAAnalyser.dictPyxb[objPyxbName]={}
380 objAAnalyser.dictPyxb[objPyxbName]=[]
381 #objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
382 for objPyxb in objPyxbValue :
383 #print ('-------------',objPyxb)
384 dictArgs[objPyxbName].append(self.pyxbToDict(objPyxb))
385 objPyxb.dictPyxb['objEnPyxb'] = objPyxb
386 objAAnalyser.dictPyxb[objPyxbName].append(objPyxb.dictPyxb)
388 dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName))
389 #print ('ajout ds dico de ', objAAnalyser , 'de', objPyxbName, objPyxbValue)
390 objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb
391 #print ('ajout ds dico de ', objPyxbValue.dictPyxb, 'de', objPyxbName)
392 objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
393 #print ("***********************************")
394 #print ('pyxbToDict fin pour ********** ', objAAnalyser)
395 #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
396 #print ('pyxbToDict fin pour ********** ', objAAnalyser)
397 #print ("***********************************")
400 #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i]))
401 #print ('fin pour ',objAAnalyser)
407 if __name__ == "__main__":