From b059f7603fa467a410827837d36194c1e68329f8 Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Fri, 10 May 2019 18:05:38 +0200 Subject: [PATCH] bug sur les mots clefs facultatifs qui prennent la place des autres!! --- Efi2Xsd/MCAccasXsd.py | 85 ++++++++++++++++++++++++++++++------------- 1 file changed, 59 insertions(+), 26 deletions(-) diff --git a/Efi2Xsd/MCAccasXsd.py b/Efi2Xsd/MCAccasXsd.py index 159c476d..5c4b057f 100755 --- a/Efi2Xsd/MCAccasXsd.py +++ b/Efi2Xsd/MCAccasXsd.py @@ -178,9 +178,9 @@ class X_MCSIMP(X_OBJECT): if self.valeur != None : self.objPyxb=self.maClasseModeleMetier(self.valeur) else : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False); - if self.objPyxb : self.objPyxb.objAccas=self + if self.objPyxb !=None : self.objPyxb.objAccas=self #print ('X_MCSIMP', self.nom, self.objPyxb, ) - #print ('fin X_MCSIMP', self.objPyxb, self.nom,self, self.maClasseModeleMetier,self.valeur) + print ('fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur) def setValeurObjPyxb(self,newVal): @@ -261,30 +261,37 @@ class X_MCCOMPO(X_OBJECT) : # ------------------------- # def buildObjPyxb(self,mc_list) : - print ('________________________________________________') + #print ('________________________________________________') if not self.cata.modeleMetier : return - print ('X_MCCOMPO buildObjPyxb', self, mc_list) + #print ('X_MCCOMPO buildObjPyxb', self.nom, self, mc_list) self.listArg=[] - dicoargs={} + self.dicoArg={} for objAccas in mc_list : + #print (objAccas.nom,objAccas.nature) if objAccas.nature == 'MCBLOC' : self.exploreBLOC(objAccas) elif objAccas.nature == 'MCList' : - for fils in objAccas : - # print (fils.nom) - # print (fils.objPyxb,fils.maClasseModeleMetier) - fils.perePyxb=self - self.listArg.append(fils.objPyxb) - dicoargs[fils.nom]=fils.objPyxb + #print ('MCList explore', objAccas.nom, len(objAccas), objAccas[0].definition.max ) + if objAccas[0].definition.max > 1 : + self.listArg.append(objAccas) # les MCList n ont pas objPyxb + self.dicoArg[objAccas.nom]=[] + for fils in objAccas : + fils.perePyxb=self + self.dicoArg[objAccas.nom].append(fils.objPyxb) + else : + objAccas[0].perePyxb=self + self.dicoArg[objAccas.nom]=objAccas[0].objPyxb + self.listArg.append(objAccas[0].objPyxb) else : - #print (objAccas.nom,objAccas.maClasseModeleMetier) if objAccas.nom == 'Consigne' : continue self.listArg.append(objAccas.objPyxb) - dicoargs[objAccas.nom]=objAccas.objPyxb + #print (self.listArg) + self.dicoArg[objAccas.nom]=objAccas.objPyxb objAccas.perePyxb=self - print('X_MCCOMPO -- listArg ---',self.nom,self.listArg) + #print('X_MCCOMPO -- listArg ---',self.nom,self.listArg) + #print('X_MCCOMPO -- dicoArg ---',self.nom,self.dicoArg) self.monNomClasseModeleMetier='T_'+self.nom if self.nom in list(self.cata.DicoNomTypeDifferentNomElt.keys()) : @@ -299,17 +306,35 @@ class X_MCCOMPO(X_OBJECT) : #print (self.nom) #print (self.listArg) # self.objPyxb=self.maClasseModeleMetier(*self.listArg) - self.objPyxb=self.maClasseModeleMetier(**dicoargs) + self.objPyxb=self.maClasseModeleMetier(**self.dicoArg) newordercontent=[] + + # print ('uuuuuuuuuuuuuu', self.objPyxb.orderedContent()) + # print ('kkkkkkkkkkkkkkkkkkkkk listArg', self.listArg) for obj in self.listArg: - print('X_MCCOMPO -- obj ----',obj) - newordercontent.append( self.objPyxb.orderedContent()[map(lambda o:id(o.value), self.objPyxb.orderedContent()).index(id(obj))] ) + # print (obj) + # on teste le caractere pluriel + if (hasattr(obj, 'nature')) : # attention on a un object Accas et non un pyxb car les MCList n ont pas de objPyxb + # print ('obj----------', obj.nom) + max=obj[0].definition.max + else : max = 1 + # print (max) + if max == 1 : + if not(issubclass(type(obj), pyxb.binding.basis.enumeration_mixin) ): + newordercontent.append(self.objPyxb.orderedContent()[map(lambda o:id(o.value), self.objPyxb.orderedContent()).index(id(obj))] ) + else : + newordercontent.append(self.objPyxb.orderedContent()[map(lambda o:type(o.value), self.objPyxb.orderedContent()).index(type(obj))] ) + else : # element Pural + for c in self.objPyxb.orderedContent() : + if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(obj[0].objPyxb)): newordercontent.append(c) + # print ('uuuuuuuuuuuuuu', newordercontent) + for i in xrange(len(self.listArg)): self.objPyxb.orderedContent()[i]=newordercontent[i] self.objPyxb.objAccas=self - print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,newordercontent,self.objPyxb.orderedContent()) - print ('_______________________________________') + #print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,newordercontent,self.objPyxb.orderedContent()) + #print ('_______________________________________') # assert(self.objPyxb.validateBinding()) def delObjPyxb(self): @@ -321,21 +346,29 @@ class X_MCCOMPO(X_OBJECT) : #print ('******************************************') def exploreBLOC(self,objAccas): + #print (' ds exploreBLOC', objAccas .nom) laListeSsLesBlocs=[] for fils in objAccas.mcListe: if fils.nature == 'MCBLOC' : self.exploreBLOC(fils) elif fils.nature == 'MCList' : - for objFils in fils : - #fils.perePyxb=self - #self.listArg.append(fils.objPyxb) - # fils ou objFils - objFils.perePyxb=self - self.listArg.append(objFils.objPyxb) - #print (fils.nom ,' est un MC ds un MCLIST et a pour pere Pyxb', self, self.nom) + #print ('exploreBLOC des MCList', fils.nom) + self.dicoArg[fils.nom]=[] + if fils[0].definition.max > 1 : + #print ('ajout de ', fils) + self.listArg.append(fils) # les MCList n ont pas objPyxb + for objFils in fils : + objFils.perePyxb=self + self.dicoArg[fils.nom].append(objFils.objPyxb) + else: + fils[0].perePyxb=self + self.dicoArg[fils.nom]=fils[0].objPyxb + self.listArg.append(fils[0].objPyxb) else : if fils.nom == "Consigne" : continue + #print ('ajout de 2', fils.objPyxb) self.listArg.append(fils.objPyxb) + self.dicoArg[fils.nom]=fils.objPyxb fils.perePyxb=self #print (fils.nom ,' est un SIMP a pour pere Pyxb', self, self.nom) -- 2.39.2