]> SALOME platform Git repositories - tools/eficas.git/blob - Efi2Xsd/MCAccasXML.py
Salome HOME
chgt Copyrigth
[tools/eficas.git] / Efi2Xsd / MCAccasXML.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 import sys,os
4 import inspect
5 import traceback
6 def trace():
7   traceback.print_stack()
8 #import raw.efficas as efficas
9 import types
10
11 sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
12
13 try :
14   import pyxb
15   import pyxb.binding
16   import pyxb.binding.basis
17   #import pyxb.utils.utility
18   #import pyxb.utils.domutils
19 except : pass
20
21 from Accas import A_ASSD
22
23 class X_OBJECT:
24 # -------------
25
26   def delObjPyxb(self, debug=False):
27       if not self.cata or not self.cata.modeleMetier : return
28       if self.nom == 'Consigne' : return None
29       trouve = False
30       
31       if debug : print ('in delObjPyxb')
32       if debug : print (self.perePyxb.objPyxb.orderedContent())
33       if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
34       
35       elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
36       if debug : print ('element moi = ', elt, 'id de moi = ', id(self.objPyxb), self.objPyxb)
37       if (elt.elementDeclaration.isPlural()):
38         if debug : print ('je suis Plural')
39       #   monIndexInOrderedContent=0
40       #   for c in self.perePyxb.objPyxb.orderedContent(): 
41       #     if isinstance(c._Content__value,list) and  isinstance(c._Content__value[0], type(self.objPyxb)): monIndexInOrderedContent += 1
42       #   listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
43       #   if len(listeObjetsAccas) == 1 : monIndex=0
44       #   else : monIndex=listeObjetsAccas.index(self)
45       #   listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
46       #   listeObjetsPyxb.pop(monIndex)
47       #   self.perePyxb.objPyxb.orderedContent().pop(monIndexInOrderedContent)
48         for c in self.perePyxb.objPyxb.orderedContent(): 
49            trouve=False
50            if isinstance(c._Content__value,list) and  isinstance(c._Content__value[0],type(self.objPyxb)):
51               monIndex=c.value.index(self.objPyxb)
52               trouve = True
53            if trouve : break
54         if not trouve : print ("************ pas trouve au delete"); return
55         listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
56         listeObjetsPyxb.pop(monIndex)
57         # si dernier ?
58       else :
59         newOrderedContent = []
60         for i in self.perePyxb.objPyxb.orderedContent(): 
61             if id(self.objPyxb) == id(i._Content__value) : trouve = True ;continue
62             newOrderedContent.append(i)
63         if not trouve : print ('elt a supprimer ', self.nom, 'non trouve')
64         for i in range(len(newOrderedContent)):
65           self.perePyxb.objPyxb.orderedContent()[i]=newOrderedContent[i]
66         self.perePyxb.objPyxb.orderedContent().pop(len(newOrderedContent))
67
68         setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,None)
69         if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
70
71       
72
73   def addObjPyxb(self,indiceDsLeContenu,debug=False):
74       if not self.cata or not self.cata.modeleMetier : return
75       if debug :print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
76       # adherence Accas sur le parent
77       parent=self.parent
78       while (parent.isBLOC()): 
79            if parent != self.parent : indiceDsLeContenu += parent.rangDsPyxb()
80            parent=parent.parent
81       self.perePyxb=parent
82
83       if debug :print ('indiceDsLeConten',indiceDsLeContenu) 
84       if debug :print (pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
85
86       #if self.objPyxb ! = None : self.objPyxb.objAccas=self
87       elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
88       self.perePyxb.objPyxb.orderedContent().insert(indiceDsLeContenu,elt)
89       if (elt.elementDeclaration.isPlural()):
90       # je suis donc un MCList
91          listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
92          if len(listeObjetsAccas) == 1 : monIndex=1
93          else : monIndex=listeObjetsAccas.index(self)
94          listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
95          listeObjetsPyxb.insert(monIndex,self.objPyxb)
96       else :
97          setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb)
98       if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
99       print ('fin _____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
100  
101
102   def rangDsPyxb(self):
103       monRangEnAccas=self.parent.mcListe.index(self)
104       rangEnPyxb=0
105       for frere in self.parent.mcListe[0: monRangEnAccas] :
106           rangEnPyxb += frere.longueurDsArbre()
107       return rangEnPyxb
108       
109
110 class X_MCSIMP(X_OBJECT):
111 # -----------------------
112       
113    def buildObjPyxb(self, debug=False) :
114       if not self.cata or not self.cata.modeleMetier : return
115       if self.nom == 'Consigne' : return None
116       if debug : print ('X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
117       if debug and self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
118       elif debug : print ('objPyxbDeConstruction', self.objPyxbDeConstruction)
119
120       if self.objPyxbDeConstruction != None :
121         self.objPyxb = self.objPyxbDeConstruction
122         #self.objPyxb.objAccas=self
123         self.maClasseModeleMetier =type(self.objPyxb)
124         self.objPyxbDeConstruction = None
125         if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union): 
126               self.needFactory=True
127               self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
128         else : self.needFactory=False
129       else :
130         self.monNomClasseModeleMetier='T_'+self.nom
131         if self.nom in list(self.cata.DicoNomTypeDifferentNomElt.keys()) : 
132            self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.nom][self.nomComplet()]
133         self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
134         if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union): 
135               if debug : print ('needFactory')
136               self.needFactory=True
137               self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
138         else : self.needFactory=False
139            
140         if self.valeur != None : 
141            if self.needFactory :  self.objPyxb=self.maClasseModeleMetierFactory(self.valeur)
142            else                :  self.objPyxb=self.maClasseModeleMetier(self.valeur)
143         else                   :  
144            if self.needFactory : self.objPyxb=None
145            else                : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False)
146
147
148         # c est la que le bat blesse
149         #if self.objPyxb !=None : self.objPyxb.objAccas=self
150       #if debug : print ('X_MCSIMP', self.nom, self.objPyxb, )
151       if debug : print ('fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
152
153
154    def setValeurObjPyxb(self,newVal, debug=False):
155        if not self.cata or not self.cata.modeleMetier : return
156        if debug : print (' ___________________________ dans setValeurObjPyxb MCSIMP ', self.nom, newVal)
157        if debug : print (' self.perePyxb = ', self.perePyxb.nom)
158        if inspect.isclass(newVal) and issubclass(newVal,A_ASSD)  : newVal = newVal.nom
159        if debug : print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb)
160        
161        #if newVal != None : nvlObj=self.maClasseModeleMetier(newVal)
162        if newVal != None : 
163            if self.needFactory : nvlObj=self.maClasseModeleMetierFactory(newVal)
164            else                : nvlObj=self.maClasseModeleMetier(newVal)
165        else                   : 
166            if self.needFactory : nvlObj =None
167            else                : nvlObj=self.maClasseModeleMetier(_validate_constraints=False)
168        self.val=newVal
169
170        setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
171        trouve=False
172        indice=0
173        for i in self.perePyxb.objPyxb.orderedContent(): 
174            if isinstance(i._Content__value, self.maClasseModeleMetier) : 
175               self.perePyxb.objPyxb.orderedContent()[indice]=self.perePyxb.objPyxb.orderedContent()[-1]
176               del(self.perePyxb.objPyxb.orderedContent()[-1])
177               trouve=True
178               break
179            indice+=1
180        if not trouve : print ('Attention souci au changement de valeur de ', self.nom)
181        self.objPyxb=nvlObj
182        #self.objPyxb.objAccas=self
183        if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
184
185         
186       
187
188 class X_MCCOMPO(X_OBJECT) :
189 # -------------------------
190
191    def buildObjPyxb(self,mc_list, debug=False) :
192       if not self.cata or not self.cata.modeleMetier : return
193       print ('X_MCCOMPO', self.nom)
194       self.listArg=[]
195       self.dicoArg={}
196       for objAccas in mc_list :
197         if objAccas.nature == 'MCBLOC' :
198            self.exploreBLOC(objAccas)
199         elif objAccas.nature == 'MCList' :
200            if objAccas[0].definition.max > 1 :
201               self.listArg.append(objAccas) # les MCList n ont pas objPyxb
202               self.dicoArg[objAccas.nom]=[]
203               for fils in objAccas : 
204                   fils.perePyxb=self
205                   self.dicoArg[objAccas.nom].append(fils.objPyxb)
206            else : 
207                objAccas[0].perePyxb=self
208                self.dicoArg[objAccas.nom]=objAccas[0].objPyxb
209                self.listArg.append(objAccas[0].objPyxb)
210         else :
211            if objAccas.nom == 'Consigne'     : continue 
212            self.listArg.append(objAccas.objPyxb)
213            self.dicoArg[objAccas.nom]=objAccas.objPyxb
214            objAccas.perePyxb=self
215
216       if debug : print('X_MCCOMPO -- listArg ---',self.nom,self.listArg)
217       if debug : print('X_MCCOMPO -- dicoArg ---',self.nom,self.dicoArg)
218         
219       self.monNomClasseModeleMetier='T_'+self.nom
220       if self.nom in list(self.cata.DicoNomTypeDifferentNomElt.keys()) : 
221          self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.nom][self.nomComplet()]
222       self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
223       
224       # PN : Ne doit-on pas tester avant
225       if self.objPyxbDeConstruction != None :
226         self.objPyxb = self.objPyxbDeConstruction
227         self.objPyxbDeConstruction = None
228         if debug : print ('je passe dans le if pour ', self.nom, self.objPyxb, self)
229         if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,self.objPyxb.orderedContent())
230       else :
231         if debug : print (self.nom)
232         if debug : print (self.listArg)
233         # self.objPyxb=self.maClasseModeleMetier(*self.listArg)
234         self.objPyxb=self.maClasseModeleMetier(**self.dicoArg)
235         newOrderedContent=[]
236         for obj in self.listArg:
237            # on teste le caractere pluriel
238            if (hasattr(obj, 'nature')) : # attention on a un object Accas et non un pyxb car les MCList n ont pas de objPyxb
239                max=obj[0].definition.max 
240            else : max = 1
241            if  max == 1 :
242             if not(issubclass(type(obj), pyxb.binding.basis.enumeration_mixin) ):
243                newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] )
244             else :
245                newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:type(o.value), self.objPyxb.orderedContent())).index(type(obj))] )
246            else  : # element Pural
247             for c in self.objPyxb.orderedContent() :
248                if isinstance(c._Content__value,list) and  isinstance(c._Content__value[0], type(obj[0].objPyxb)): newOrderedContent.append(c)
249
250         for i in range(len(self.listArg)):
251           self.objPyxb.orderedContent()[i]=newOrderedContent[i]
252         if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,newOrderedContent,self.objPyxb.orderedContent())
253       #self.objPyxb.objAccas=self
254       if debug : print ('fin buildObjetPyxb _______________________________________')
255       # assert(self.objPyxb.validateBinding())
256
257
258    def exploreBLOC(self,objAccas):
259       print (' ds exploreBLOC', objAccas .nom)
260       laListeSsLesBlocs=[]
261       for fils in objAccas.mcListe:
262         if fils.nature == 'MCBLOC' :
263            self.exploreBLOC(fils)
264         elif fils.nature == 'MCList' :
265            #print ('exploreBLOC des MCList', fils.nom)
266            self.dicoArg[fils.nom]=[]
267            if fils[0].definition.max > 1 :
268               #print ('ajout de ', fils)
269               self.listArg.append(fils) # les MCList n ont pas objPyxb
270               for objFils in fils : 
271                   objFils.perePyxb=self
272                   self.dicoArg[fils.nom].append(objFils.objPyxb)
273            else:
274              fils[0].perePyxb=self
275              self.dicoArg[fils.nom]=fils[0].objPyxb
276              self.listArg.append(fils[0].objPyxb)
277         else :
278            if fils.nom == "Consigne" : continue
279            #print ('ajout de 2', fils.objPyxb)
280            self.listArg.append(fils.objPyxb)
281            self.dicoArg[fils.nom]=fils.objPyxb
282            fils.perePyxb=self
283            print (fils.nom ,' est un SIMP a pour pere Pyxb', self, self.nom)
284           
285    
286
287   
288 class X_MCBLOC (X_MCCOMPO):
289 # --------------------------
290    def buildObjPyxb(self,mc_list,debug=False):
291       if not self.cata or not self.cata.modeleMetier : return
292       if debug : print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list, 'ne fait rien')
293       self.perePyxb=None
294       self.objPyxb=None
295         
296    def addObjPyxb(self, indiceDsLeContenu, debug=False):
297       if not self.cata or not self.cata.modeleMetier : return
298       if debug : print ('X_MCBLOC addObjPyxb', self.nom, self, self.mcListe, indiceDsLeContenu)
299       rangDeLObjet=indiceDsLeContenu
300       for obj in self.mcListe:
301           obj.addObjPyxb( rangDeLObjet)
302           rangDeLObjet=rangDeLObjet+obj.longueurDsArbre()
303        
304    def delObjPyxb(self, debug=False):
305       if not self.cata or not self.cata.modeleMetier : return
306       if debug : print ('X_MCBLOC delObjPyxb', self.nom, ' --------------------------')
307       for obj in self.mcListe:
308           obj.delObjPyxb()
309       if debug : print ('fin X_MCBLOC delObjPyxb --------------------------')
310
311 class X_MCLIST (X_MCCOMPO):
312 # --------------------------
313  
314   def buildObjPyxb(self,mc_list, debug=False):
315       if debug : print ('X_MCLIST buildObjPyxb ne fait rien', self.nom, self, mc_list)
316       pass
317     
318   def addObjPyxb(self,indiceDsLeContenu, debug=False):
319       if debug : print ('X_MCLIST addObjPyxb', self.nom, indiceDsLeContenu)
320       rangDeLObjet=indiceDsLeContenu
321       for objFils in self :
322           objFils.addObjPyxb(rangDeLObjet)
323           rangDeLObjet= rangDeLObjet + 1
324
325   def delObjPyxb(self, debug=False):
326       if not self.cata or not self.cata.modeleMetier : return
327       if debug : print ('X_MCLIST delObjPyxb', self.nom, ' --------------------------')
328       for obj in self:
329           obj.delObjPyxb()
330       if debug : print ('fin X_MCLIST delObjPyxb --------------------------')
331
332
333 class X_MCFACT (X_MCCOMPO):
334 # -------------------------
335   pass
336
337 class X_ETAPE(X_MCCOMPO) :
338 # -------------------------
339
340    def metAJourNomASSD(self, nom,debug=False):
341       if not self.cata or not self.cata.modeleMetier : return
342       if debug : print ('X_ETAPE metAJourLesAttributs', self.nom, nom,' --------------------------')
343       self.objPyxb.name=nom
344
345 class X_JDC (X_MCCOMPO):
346 # ---------------------
347  
348    def  __init__(self):
349       self.perePyxb=None
350       if not self.cata or not self.cata.modeleMetier : return
351       #if hasattr(self.cata,'DicoNomTypeDifferentNomElt') : print ('jkllllllllllllllll')
352       if not(hasattr(self.cata,'DicoNomTypeDifferentNomElt')) : self.cata.DicoNomTypeDifferentNomElt={}
353       self.monNomClasseModeleMetier=self.code
354       self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
355       self.objPyxb=self.maClasseModeleMetier()
356       #self.objPyxb.objAccas=self
357       pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.NEVER)
358       pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
359       pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
360       
361       
362
363    def enregistreEtapePyxb(self,etape,indice=0):
364      # ne fonctionne pas : a reecrire avec les fonctions addObjPyxb et ReconstruitPerePyxb
365      # ne contient pas indice pour l insant
366       #print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh')
367       #print ('enregistre ds ',self, etape.nom, 'indice = ', indice)
368       if not self.cata.modeleMetier : return
369       self.objPyxb.append(etape.objPyxb)
370       etape.perePyxb = self
371
372       #print (self.objPyxb.orderedContent())
373       #if indice   != (len(self.objPyxb.orderedContent()) ) : 
374       #  tampon=self.objPyxb.orderedContent()[-1]
375       #  for i in reversed(range(len(self.objPyxb.orderedContent()))):
376       #    self.objPyxb.orderedContent()[i]=self.objPyxb.orderedContent()[i-1]
377       #    if i == indice + 1 : break
378       #  self.objPyxb.orderedContent()[indice]=tampon
379
380       #print (self.objPyxb.orderedContent())
381       #try:
382       #   self.objPyxb.validateBinding()
383       #except pyxb.ValidationError as e:
384       #   print(e.details())
385
386    def toXml(self,fichier=None):
387       print ('ds to XML')
388       if not self.cata or not self.cata.modeleMetier : return
389       print (' to xml ***************',self.objPyxb,'***************',)
390       print (' to xml ***************',self,'***************',)
391       print (' to xml ***************',self.objPyxb.orderedContent(),'***************',)
392       print(self.objPyxb.toDOM().toprettyxml())
393       print(self.objPyxb.toxml())
394       return (self.objPyxb.toDOM().toprettyxml())
395         
396
397    def analyseFromXML(self):
398       print ("je suis ds analyseFromXML -- > appel ds analyseXML de I_JDC.py")
399       print (self.procedure)
400       if self.procedure == "" : return
401       self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure)
402       for contentObjEtape in self.objPyxb.orderedContent():
403           objEtape=contentObjEtape.value
404           objEtape.dictArgs=(self.pyxbToDict(objEtape))
405           objEtape.monNomClasseAccas=objEtape._ExpandedName.localName()
406           objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:]
407           # doute sur les 2 lignes suivantes : objEtape peut etre contentObjEtape 2juin20
408           objEtape.dictPyxb['objEnPyxb']=objEtape
409           objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb
410           print ('dicoPyxbDeConstruction', objEtape.dictArgs['dicoPyxbDeConstruction'])
411           maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
412           print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
413           print (maClasseAccas)
414           print (objEtape , type(objEtape))
415           print (objEtape.dictPyxb)
416  
417           print (objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
418           print (objEtape._ExpandedName, type(objEtape._ExpandedName))
419           print ('dictArgs',objEtape.dictArgs)
420           print ('dictPyxb',objEtape.dictPyxb)
421           objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
422           print (objAccasEtape)
423           print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
424           print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
425           print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
426           print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
427       
428
429    def pyxbToDict(self,objAAnalyser):
430     # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
431     # faudrait - il travailler sur les types des objets ?
432     # c est a revoir -> fonction cast a prevoir ds les 2 sens
433     if objAAnalyser is None: return
434     print ('debut pour_____________________________ ',objAAnalyser)
435     dictArgs = {}
436     # traitement SIMP
437     # ---------------
438     if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition): 
439        #print ('je suis un MCSimple')
440     # il faut traiter les UserASSD
441        # traitement scalaire
442        objAAnalyser.dictPyxb=objAAnalyser
443        if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)):
444           #print ('je suis un scalaire')
445           #try :  # python 3
446           if isinstance(objAAnalyser, str)  : return str(objAAnalyser)
447           if isinstance(objAAnalyser, int)  : return int(objAAnalyser)
448           if isinstance(objAAnalyser, float): return float(objAAnalyser)
449           if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin):    return str(objAAnalyser)
450           #except : # python 2
451           #if isinstance(objAAnalyser, types.StringTypes):  return str(objAAnalyser)
452           #if isinstance(objAAnalyser, types.FloatType):  return float(objAAnalyser)
453           #if isinstance(objAAnalyser, (types.IntType, types.LongType)):  return int(objAAnalyser)
454           #print ('________ fin pour ', objAAnalyser, 'retour', repr(objAAnalyser))
455           return objAAnalyser
456        else :
457           #print ('je suis une liste')
458           laListe=[]
459           for obj in objAAnalyser :
460               if isinstance(obj, str): laListe.append (str(obj))
461               elif isinstance(obj, int): laListe.append (int(obj))
462               elif isinstance(obj, float): laListe.append (float(obj))
463               elif isinstance(obj, pyxb.binding.basis.enumeration_mixin): laListe.append(str(obj))
464               else :  laListe.append(obj)
465           return (laListe)
466        #  if debug : print ('je suis Plural')
467        # ou ? return objAAnalyser
468        #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,)
469        #pour une enum getattr(value dans le type)
470        # return pythonLiteral(ReferenceFacet(facet=value, **kw))
471     #print ('je suis un mot complexe')
472     # traitement FACT ou BLOC
473     # ------------------------
474     # il faut traiter les fact multiples
475     objAAnalyser.dictPyxb = {} 
476     objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
477     #for expandedName, elementDeclaration in objAAnalyser._ElementMap.items():
478     #    objPyxbName  = expandedName.localName()
479     #    objPyxbValue = getattr(objAAnalyser, objPyxbName)
480     for objEltContentFils in objAAnalyser.orderedContent():
481         objPyxbValue = objEltContentFils.value
482         objPyxbName  = objEltContentFils.elementDeclaration.id()
483         elementDeclaration = objEltContentFils.elementDeclaration
484         #if objPyxbValue == None or objPyxbValue == [] : continue
485         if elementDeclaration.isPlural():
486             if objPyxbName not in list(dictArgs.keys()) : dictArgs[objPyxbName]=[] 
487             if objPyxbName not in list(objAAnalyser.dictPyxb.keys()) : objAAnalyser.dictPyxb[objPyxbName]=[] 
488             dictArgs[objPyxbName].append(self.pyxbToDict(objPyxbValue))
489             objAAnalyser.dictPyxb[objPyxbName].append(objPyxbValue.dictPyxb)
490         else:
491              dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName))
492              objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb
493             # print ('ajout dans dictPyxb', objPyxbName, objPyxbValue.dictPyxb)
494             #print ('avec la valeur', 'de',  objAAnalyser.dictPyxb[objPyxbName])
495        
496     #print ("***********************************")
497     #print ('pyxbToDict  fin pour ********** ', objAAnalyser)
498     #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
499     #print ('pyxbToDict  fin pour ********** ', objAAnalyser)
500     #print ("***********************************")
501     #print (dictArgs)
502     #print (dictPyxb)
503     #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i]))
504     #print ('fin pour ',objAAnalyser)
505     return dictArgs
506
507    
508 #   def analyseContent(self,objAAnalyser):
509 #       objAAnalyser.dictArgs={}
510 #       for objContenu in objAAnalyser.content():
511 #          #print ('j analyse ', objContenu)
512 #          objContenu.monNomClasseModeleMetier=str(objContenu.__class__).split('.')[-1]
513 #          objContenu.monNomClasseAccas=objContenu.monNomClasseModeleMetier[2:-2]
514 #          #maClasseAccas=classeAccasPere.entites[objContenu.monNomClasseAccas]
515 #          if objContenu._IsSimpleTypeContent():
516 #             print (objContenu.monNomClasseAccas,objContenu.pythonLiteral())
517 #             print (objContenu.monNomClasseAccas,objContenu.xsdLiteral())
518 #             #chaine=objContenu.pythonLiteral().split('(')[1].split(')')[0]
519 #             print (dir(objContenu))
520 #             objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=None
521 #             #objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.pythonLiteral()
522 #          else :
523 #             self.analyseContent(objContenu)
524 #             objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.dictArgs
525        #print ( '________________')
526        #print (objAAnalyser.monNomClasseAccas)
527        #for i in objAAnalyser.dictArgs : print (i, objAAnalyser.dictArgs[i])
528        #print ( '________________')
529         
530   
531
532 if __name__ == "__main__":
533    print ('a faire')