From ccf087855377bad7c50ac3ad6ee4f4cd5662249d Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Tue, 27 Apr 2021 07:43:49 +0200 Subject: [PATCH] project des matrices --- Efi2Xsd/AccasXsd.py | 83 ++++++++++++++++++++++++++++++++++--------- Efi2Xsd/MCAccasXML.py | 37 ++++++++++++++++--- Efi2Xsd/balisesXSD.py | 24 ++++++++++--- 3 files changed, 120 insertions(+), 24 deletions(-) diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index e08a6776..c030fb0f 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -200,7 +200,7 @@ class X_compoFactoriseAmbigu(X_definition): self.ordre_mc=[] self.lesConditions = 'Possible Conditions : ' for mc in listeDeCreation : - self.lesConditions += '\n\t\t\t\t\t\t' + mc.condition + if hasattr(mc, 'condition'):self.lesConditions += '\n\t\t\t\t\t\t' + mc.condition self.mcXSD.append(mc) self.ordre_mc.append(mc.nom) @@ -803,7 +803,7 @@ class X_BLOC (X_definitionComposee): class X_SIMP (X_definition): #-------------------------------- def dumpXsd(self, dansFactorisation=False, multiple=False, first=False, debug=False): - debug = True + #debug = True #if PourTraduction : print (self.nom) if debug : print ('X_SIMP dumpXsd pour', self.nom, '___________________________') self.prepareDumpXSD() @@ -844,6 +844,10 @@ class X_SIMP (X_definition): self.dumpSpecifiqueMatrice(minOccurs) return + if self.suisUnTuple : + self.dumpSpecifiqueTuple(minOccurs) + return + #print ('minOccurs',minOccurs) # le defaut est dans l elt Name -> tester la coherence d existence avec Accas # regles Accas @@ -866,6 +870,7 @@ class X_SIMP (X_definition): if not('TXM' in (self.type)) : separe = ' ' else : separe ='\n' for val in self.defaut : txtDefaut+=str(val) + separe + # cela ne fonctionne pas tres bien. a revoir txtDefaut+=txtDefaut[0:-1] if not('TXM' in (self.type)) : # a revoir pour les tuples avec defaut @@ -877,7 +882,7 @@ class X_SIMP (X_definition): else : if str(self.defaut) == 'True' : txtDefaut = 'true' elif str(self.defaut) == 'False' : txtDefaut = 'false' - else : txtDefaut = str(self.defaut)+('\n') + else : txtDefaut = str(self.defaut) if texteAide != '' : self.texteElt = eltDsSequenceWithDefautAndHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut,texteAide) else : self.texteElt = eltDsSequenceWithDefaut.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut) else : @@ -945,6 +950,49 @@ class X_SIMP (X_definition): self.texteSimple = self.texteSimplePart1 + self.texteSimplePart2 + def dumpSpecifiqueTuple(self,minOccurs): + self.nomDuTypeDeBase = self.traduitType() + tousPareil=True + # il faut gerer l aide et les defaut + if self.defaut : print ('il faut tester le defaut') + if self.max == '**' or self.max == float('inf') : max='unbounded' + else : max = self.max + self.texteElt = tupleNonHomogeneElt.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,max) + leType=self.nomDuTypeDeBase[0] + for leTypeComp in self.nomDuTypeDeBase[1:] : + if leTypeComp != leType : + tousPareil = False + break; + #if tousPareil : + #PN PN a statuer + # self.texteSimple += debutSimpleType.format(self.nomDuTypePyxb) + # self.texteSimple += debutTypeSimpleListe + # self.texteSimple += "\t\t\t\t"+debutRestrictionBase.format(leType) + # if self.val_min != float('-inf') : self.texteSimple += "\t\t\t\t"+minInclusiveBorne.format(self.val_min) + # if self.val_max != float('inf') and self.val_max != '**' : self.texteSimple +="\t\t\t\t"+ maxInclusiveBorne.format(self.val_max) + # if self.into != None: + # into=self.into + # if self.intoXML != None : into = self.intoXML + # for val in into : self.texteSimple += "\t\t\t\t"+enumeration.format(val) + # if PourTraduction : + # for val in into : print (str(val)) + # self.texteSimple += fermeBalisesMileu + # if self.max !=1 and self.max != '**' and self.max != float('inf') : self.texteSimple += maxLengthTypeSimple.format(self.max) + # if self.min !=1 and self.min != float('-inf') : self.texteSimple += minLengthTypeSimple.format(self.min) + # self.texteSimple += fermeSimpleType + # return + + self.texteSimple = '' + complexeTypeTuple = tupleDebutComplexeType.format(self.nomDuTypePyxb) + num = 1 + for leType in self.nomDuTypeDeBase : + self.texteSimple += tupleNonHomogeneSimpleType.format(self.nomDuTypePyxb,str(num),leType) + complexeTypeTuple += tupleMilieuComplexeType.format(str(num),self.nomDuTypePyxb,str(num)) + num = num + 1 + complexeTypeTuple += tupleFinComplexeType + self.texteSimple += complexeTypeTuple + + def dumpSpecifiqueMatrice(self,minOccurs): # if faut traiter le defaut typeDeMatrice =self.type[0] @@ -958,8 +1006,8 @@ class X_SIMP (X_definition): nom=self.nomDuTypePyxb nbCols=typeDeMatrice.nbCols nbLigs=typeDeMatrice.nbCols - self.texteSimple += matriceSimpleType.format(nom,nom,nbCols,nom,self.nom,self.code,nom,nbLigs,nbLigs,nom,self.code,nom,self.min,self.max) - self.texteElt = "\t\t\t\t"+eltMatrice.format(self.code,nom,minOccurs,1)+"\n" + self.texteSimple += matriceSimpleType.format(nom,nom,nbCols,nom,self.code,nom,nbLigs,nbLigs,nom,self.code,nom,self.min,self.max) + self.texteElt = eltMatrice.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1) def prepareDumpXSD(self): @@ -976,20 +1024,23 @@ class X_SIMP (X_definition): # il faut gerer les types tuple et fichier # on ne paut pas tester le type qui depend du cataloge if hasattr(self.type[0], 'typElt') : - #print ('je suis une Matrice de ' ,dictNomsDesTypes[self.type[0].typElt]) - self.suisUneMatrice = True - return dictNomsDesTypes[self.type[0].typElt] + #print ('je suis une Matrice de ' ,dictNomsDesTypes[self.type[0].typElt]) + self.suisUneMatrice = True + return dictNomsDesTypes[self.type[0].typElt] else : - self.suisUneMatrice = False + self.suisUneMatrice = False if hasattr(self.type[0], 'ntuple') : - try : - leType=self.validators.typeDesTuples[0] - for i in range(self.type[0].ntuple): - if self.validators.typeDesTuples[i] != leType : return ('XXXXXXXX') - typeATraduire=leType - except : - return ('XXXXXXXX') + self.suisUnTuple = True + # Pour l instant pas de into dans les tuples non homogenes et pas de reference + # sinon, il faudra faire un for sur la suite avec les createObjet + leType=self.validators.typeDesTuples[0] + enRetour=[] + for i in range(self.type[0].ntuple): + enRetour.append(dictNomsDesTypes[self.validators.typeDesTuples[i]]) + return enRetour + #typeATraduire=leType else : + self.suisUnTuple = False typeATraduire=self.type[0] if not (typeATraduire in list(dictNomsDesTypes.keys())) : #if (isinstance(typeATraduire, Accas.ASSD) or issubclass(typeATraduire, Accas.ASSD)) : diff --git a/Efi2Xsd/MCAccasXML.py b/Efi2Xsd/MCAccasXML.py index a3176db6..55694623 100755 --- a/Efi2Xsd/MCAccasXML.py +++ b/Efi2Xsd/MCAccasXML.py @@ -139,7 +139,6 @@ class X_MCSIMP(X_OBJECT): if self.objPyxbDeConstruction != None : self.objPyxb = self.objPyxbDeConstruction - #self.objPyxb.objAccas=self self.maClasseModeleMetier =type(self.objPyxb) self.objPyxbDeConstruction = None if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union): @@ -155,6 +154,21 @@ class X_MCSIMP(X_OBJECT): self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][nomComplet] if debug : print ('Pour', self.nom, ' le type est ', self.monNomClasseModeleMetier) self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) + + if self.waitMatrice() : + #PNPN : Attention rien ne relie la listeObjPyxb et l objAccas + # 21/04 je ne sais pas si cela posera pb + debug = 1 + self.objPyxb = [] + self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) + if debug : print ('Matrice de type ', self.maClasseModeleMetier) + #for v in self.valeur: self.objPyxb.append(self.maClasseModeleMetier(v)) + for v in self.valeur: + l=self.maClasseModeleMetier(v) + l.objAccas=self + self.objPyxb.append(l) + if debug : print ('Matrice ', self.nom, self.objPyxb) + return if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union): if debug : print ('needFactory') self.needFactory=True @@ -221,6 +235,7 @@ class X_MCCOMPO(X_OBJECT) : def buildObjPyxb(self,mc_list, debug=False) : if not self.cata or not self.cata.modeleMetier : return + debug=1 if debug : print ('X_MCCOMPO', self.nom) self.listArg=[] self.dicoArg={} @@ -240,7 +255,9 @@ class X_MCCOMPO(X_OBJECT) : self.listArg.append(objAccas[0].objPyxb) else : if objAccas.nom == 'Consigne' : continue - self.listArg.append(objAccas.objPyxb) + if 0 : #objAccas.waitMatrice() : + for o in objAccas.objPyxb : self.listArg.append(o) + else: self.listArg.append(objAccas.objPyxb) self.dicoArg[objAccas.nom]=objAccas.objPyxb objAccas.perePyxb=self @@ -265,12 +282,20 @@ class X_MCCOMPO(X_OBJECT) : # self.objPyxb=self.maClasseModeleMetier(*self.listArg) self.objPyxb=self.maClasseModeleMetier(**self.dicoArg) if debug : + print ('debut de __________ new ordered content') for o in self.objPyxb.orderedContent(): print ('o', o) print ('value', o.value) print ('type', type(o.value)) print ('id', id(o.value)) - print ('fin __________ ordered content') + print ('fin __________ new ordered content') + print ('debut de __________ listArg') + for obj in self.listArg: + print ('obj',obj) + print ('type obj', type(obj)) + print ('id(obj)', id(obj)) + print ('fin __________ listArg') + newOrderedContent=[] if debug : print ('list Arg') for obj in self.listArg: @@ -280,6 +305,11 @@ class X_MCCOMPO(X_OBJECT) : print ('id(obj)', id(obj)) # on teste le caractere pluriel + if isinstance(obj, list): + for c in self.objPyxb.orderedContent() : + if hasattr (c,'value') and c.value == obj : + newOrderedContent.append(c) + continue if (hasattr(obj, 'nature')) : # attention on a un object Accas et non un pyxb car les MCList n ont pas de objPyxb max=obj[0].definition.max else : max = 1 @@ -297,7 +327,6 @@ class X_MCCOMPO(X_OBJECT) : for i in range(len(self.listArg)): self.objPyxb.orderedContent()[i]=newOrderedContent[i] if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,newOrderedContent,self.objPyxb.orderedContent()) - #self.objPyxb.objAccas=self if debug : print ('fin buildObjetPyxb _______________________________________') # assert(self.objPyxb.validateBinding()) diff --git a/Efi2Xsd/balisesXSD.py b/Efi2Xsd/balisesXSD.py index 5d55ef12..5b764680 100644 --- a/Efi2Xsd/balisesXSD.py +++ b/Efi2Xsd/balisesXSD.py @@ -109,11 +109,27 @@ eltCata = '\t\n\t\t\n' #implementeAbstrait = '\t\n' +# MATRICE oldVersion +# (_matrix ou pas ?) +#matriceSimpleType = '\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n' +#matriceSimpleType = '\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n' +#matriceSimpleType +='\t\n\t\t\n\t\t\t\t\n\t\t\n\t\n\t\n' +#matriceSimpleType +='\t\n\t\t\n\t\t\t\t\n\t\t\n\t\n\t\n' +#matriceSimpleType +='\t\n\t\t\n\t\t\t\t\n\t\t\n\t' +#eltMatrice = ' ' + +# TUPLE +tupleNonHomogeneSimpleType = '\t\n\t\t\n\t\t\n' +tupleNonHomogeneElt = '\t\t\t\n' +tupleDebutComplexeType = '\t\n\t\t' +tupleMilieuComplexeType = '\n\t\t\t' +tupleFinComplexeType = '\n\t\t\n\t\n' + # MATRICE -matriceSimpleType = '\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n' -matriceSimpleType +='\t\n\t\t\n\t\t\t\t\n\t\t\n\t\n\t\n' -matriceSimpleType +='\t\n\t\t\n\t\t\t\t\n\t\t\n\t' -eltMatrice = ' ' +eltMatrice = '\t\t\t \n' +matriceSimpleType = '\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n' +matriceSimpleType +='\t\n\t\t\n\t\t\t\n\t\t \n\t\n' +matriceSimpleType +='\t \n\t\t\n\t\n' if __name__ == '__main__' : print ('ne fait rien') -- 2.39.2