From f58230c90e25bce85eab7b9e43de8d33549eb8ad Mon Sep 17 00:00:00 2001 From: PASCALE NOYRET Date: Mon, 21 Mar 2022 12:50:48 +0100 Subject: [PATCH] correction bug radial_meshing dans techno_data --- Efi2Xsd/AccasXsd.py | 126 +++++++++++++++++++++++++++++++++--------- Efi2Xsd/MCAccasXML.py | 40 +++++++++----- Efi2Xsd/balisesXSD.py | 10 +--- 3 files changed, 125 insertions(+), 51 deletions(-) diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index 806757cd..bfc0fe6b 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -377,15 +377,22 @@ class X_compoFactoriseAmbigu(X_definition): if debug : print ('creeSequence', creeSequence, aReduire) for nomMC in aReduire.keys(): - if debug : print ('---------- boucle for', nomMC) + if debug : print ('--------------------------------------------- boucle for', nomMC, aReduire[nomMC]) listeSuivante=aReduire[nomMC] if creeChoice and listeSuivante != [[]] : self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1 self.ajouteAuxTextes(nomMC,indent) if listeSuivante == [[]] : continue # Est-ce toujours vrai ? - if len(listeSuivante) == 1 : self.ajouteAuxTextes(listeSuivante[0],indent) - else : self.factoriseEtCreeDump(listeSuivante, indent+int(creeSequence),nomMC) + if debug : print ('listeSuivante', listeSuivante) + aTraiter=listeSuivante + while len(aTraiter) == 1 and isinstance(aTraiter[0],list): aTraiter=aTraiter[0] + if debug : print ('aTraiter', aTraiter) + if len(aTraiter) == 1 : + self.ajouteAuxTextes(aTraiter[0],indent) + else : + for mc in aTraiter : self.ajouteAuxTextes(mc, indent) if creeChoice : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc + if debug : print ('--------------------------------------------- fin boucle for', nomMC) if declencheChoiceAvecSeqVid : self.texteComplexe += '\t'*indent + debSequenceDsBloc @@ -393,20 +400,22 @@ class X_compoFactoriseAmbigu(X_definition): if creeChoice : indent=indent -1 ; self.texteComplexe += '\t'*indent + finChoiceDsBloc if creeSequence : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc - #if doitFermerSequence : indent=indent-1;self.texteComplexe += '\t'*(indent) + finSequenceDsBloc - #print (self.texteSimple) - #print ('______',' self.texteComplexe') - #print (self.texteComplexe) - #print ('_____', 'self.texteComplexeVenantDesFils') - #print (self.texteComplexeVenantDesFils) - #print ('fin pour _______________________________', self.nom) + debug=False + if debug : print (self.texteSimple) + if debug : print ('______',' self.texteComplexe') + if debug : print (self.texteComplexe) + if debug : print ('_____', 'self.texteComplexeVenantDesFils') + if debug : print (self.texteComplexeVenantDesFils) + if debug : print ('fin pour _______________________________', self.nom) return (maListeRetour) def ajouteAuxTextes(self,nomMC,indent,debug=False) : + if nomMC == 'radial_meshing' : debug =True if debug : print ('______________________________________________________') print ('ajouteAuxTextes', nomMC, self.nom) + # for i in self.entites.keys() : print (self.entites[i][0].nom) if (indent > 3) : indent = indent - 3 @@ -417,8 +426,8 @@ class X_compoFactoriseAmbigu(X_definition): nomMC=nomMC[0] if nomMC == 'Consigne' or nomMC == 'blocConsigne' : return - if debug : print (nomMC, 'dans ajoute vraiment aux textes', self.entites ) - if debug : print (self.entites[nomMC]) + #if debug : print (nomMC, 'dans ajoute vraiment aux textes', self.entites ) + if debug : print (nomMC, 'dans ajoute vraiment aux textes' ) if len(self.entites[nomMC]) == 1: mc=self.entites[nomMC][0] mc.dumpXsd(dansFactorisation=True) @@ -434,6 +443,32 @@ class X_compoFactoriseAmbigu(X_definition): print ('Projection XSD impossible, changez un des ', nomMC) exit() + # cas des matrices : + if (self.entites[nomMC][0].label == 'SIMP') and hasattr (self.entites[nomMC][0].type[0], 'typElt') : + typeEltMatrice=self.entites[nomMC][0].type[0].typElt + memeElt=1 + nbColsMin=self.entites[nomMC][0].type[0].nbCols + nbColsMax=self.entites[nomMC][0].type[0].nbCols + nbLigsMin=self.entites[nomMC][0].type[0].nbLigs + nbLigsMax=self.entites[nomMC][0].type[0].nbLigs + for e in (self.entites[nomMC][1:]) : + if not (hasattr(e.type[0], 'typElt')) : + print ('Projection XSD impossible, changez un des ', nomMC) + print ('melange de matrice et de non matrice') + exit() + if not (e.type[0].typElt == typeEltMatrice) : memeElt=O + else : + if nbColsMin > e.type[0].nbCols : nbColsMin = e.type[0].nbCols + if nbColsMax < e.type[0].nbCols : nbColsMax = e.type[0].nbCols + if nbLigsMin > e.type[0].nbLigs : nbLigsMin = e.type[0].nbLigs + if nbLigsMax < e.type[0].nbLigs : nbLigsMax = e.type[0].nbLigs + if debug and memeElt : print ('memeElt : ', memeElt) + if memeElt : self.fusionneDesMatricesDeMemeType(nomMC,nbColsMin,nbColsMax,nbLigsMin,nbLigsMax) + else : self.fusionneDesMatrices(self,nomMC) + if debug : print ('fin fusion des matrices') + return + + # cette boucle ne fonctionne que pour des SIMP resteATraiter=copy(self.entites[nomMC]) #print ('________resteATraiter', resteATraiter) @@ -477,11 +512,11 @@ class X_compoFactoriseAmbigu(X_definition): print ('Projection XSD impossible, changez un des ', nomMC) exit() self.fusionneDsUnChoix(nomMC,indent) - if debug : print ('self.nom', self.nom) - if debug : print ('self.texteComplexe' , self.texteComplexe) - if debug : print ('self.texteSimple' , self.texteSimple) - if debug : print ('self.texteElt' , self.texteElt) - if debug : print ('________________________') + #if debug : print ('self.nom', self.nom) + #if debug : print ('self.texteComplexe' , self.texteComplexe) + #if debug : print ('self.texteSimple' , self.texteSimple) + #if debug : print ('self.texteElt' , self.texteElt) + #if debug : print ('________________________') return @@ -524,13 +559,12 @@ class X_compoFactoriseAmbigu(X_definition): texteSimpleUnion += finUnion texteSimpleUnion +=fermeSimpleType self.texteSimple += texteSimplePart1 + texteSimpleUnion - if debug : - print ('______________') - print (self.texteSimple) - print ('______________') - #print ('self.texteSimple', self.texteSimple) + #if debug : + # print ('______________') + # print (self.texteSimple) + # print ('______________') - def fusionneDsUnChoix(self, nomMC,indent, debug=False): + def fusionneDsUnChoix(self, nomMC,indent, debug=True): if debug : print ('______fusionneDsUnChoix ', self.nom, self, nomMC,indent) if debug : print (self.texteComplexe) texteDocUnion='\n' @@ -540,7 +574,8 @@ class X_compoFactoriseAmbigu(X_definition): mcRef= self.entites[nomMC][0] # max = 1 : a priori les choix sont exclusifs if (hasattr (mcRef, 'aDejaEteDumpe')) : - if debug : print ("je passe la NORMALEMENT car j ai deja ete dumpe") + self.texteComplexe += '\t'*(indent) + mcRef.texteElt + if debug : print ("je passe la NORMALEMENT car j ai deja ete dumpe, j ajoute juste l elt") return leNomDuTypePyxb = mcRef.definitNomDuTypePyxb(forceACreer=True) if debug : print ('nomMC', nomMC) @@ -589,6 +624,42 @@ class X_compoFactoriseAmbigu(X_definition): self.entites[nomMC][0].aDejaEteDumpe=True + def fusionneDesMatricesDeMemeType(self,nomMC,nbColsMin,nbColsMax,nbLigsMin,nbLigsMax,debug=False): + #if nomMC == 'BU_map' : debug=True + if debug : print ('fusionneDesMatricesDeMemeType', nomMC,nbColsMin,nbColsMax,nbLigsMin,nbLigsMax) + elt=self.entites[nomMC][0] + typeDeMatrice =elt.type[0] + elt.dumpXsd(dansFactorisation=True) + if debug : + #print ('fusionneDesMatricesDeMemeType self.texteSimple avant', self.texteSimple) + print ('fusionneDesMatricesDeMemeType self.texteComplexe avant', self.texteComplexe) + self.texteSimple += debutSimpleType.format(elt.nomDuTypePyxb+'_element') + self.texteSimple += debutRestrictionBase.format(elt.nomDuTypeDeBase) + if typeDeMatrice.typEltInto != None: + for val in typeDeMatrice.typEltInto : self.texteSimple += enumeration.format(val) + self.texteSimple += fermeRestrictionBase + self.texteSimple += fermeSimpleType + nom=elt.nomDuTypePyxb + self.texteSimple += matriceSimpleType.format(nom,nom,nbColsMin,nbColsMax,nom,self.code,nom,nbLigsMin,nbLigsMax,nom,self.code,nom,1,1) + self.texteComplexe += eltMatrice.format(nomMC,self.code,nom,0,1) + if debug : print ('fusionneDesMatricesDeMemeType, self.texteSimple ', self.texteSimple) + if debug : print ('fusionneDesMatricesDeMemeType self.texteComplexe', self.texteComplexe) + if debug : print ('------------------------------------------ ') + + def fusionneDesMatrices(self,nomMC): + print ('______fusionneDesMatrices ', nomMC, ' dans : ', self) + print ('Pas d union des types complexes') + if debug : print (self.texteComplexe) + #self.texteComplexe = debutTypeSubstDsBlocFactorise.format(self.nomDuTypePyxb) + self.texteComplexe +=debutChoiceDsBloc + for mc in self.entites[nomMC]: + mc.dumpXsd() + self.texteComplexe+=mc.texteElt + self.texteSimple+=mc.texteSimple + mc.aDejaEteDumpe=True + self.texteComplexe+=finChoiceDsBloc + + # ---------------------------------------- class X_definitionComposee (X_definition): @@ -945,6 +1016,7 @@ class X_SIMP (X_definition): if dansFactorisation : minOccurs = 1 if self.suisUneMatrice : + if dansFactorisation : return self.dumpSpecifiqueMatrice(minOccurs) return @@ -1158,7 +1230,7 @@ class X_SIMP (X_definition): nom=self.nomDuTypePyxb nbCols=typeDeMatrice.nbCols nbLigs=typeDeMatrice.nbCols - self.texteSimple += matriceSimpleType.format(nom,nom,nbCols,nom,self.code,nom,nbLigs,nbLigs,nom,self.code,nom,self.min,self.max) + self.texteSimple += matriceSimpleType.format(nom,nom,nbCols,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) @@ -1177,7 +1249,7 @@ class X_SIMP (X_definition): # on ne paut pas tester le type qui depend du cataloge if hasattr(self.type[0], 'typElt') : self.suisUneMatrice = True - # on presume que le type de l elt est un ASSD + # on presume que le type de l elt est un ASSDi si il n est pas un type connu if self.type[0].typElt not in dictNomsDesTypes.keys(): return 'xs:string' return dictNomsDesTypes[self.type[0].typElt] else : @@ -1396,7 +1468,7 @@ class X_JDC_CATA : #pprint.pprint(dico) # PN reflechir a ce *** de nom #if dico != {} : self.texteXSD += texteAnnotation.format(self.nomDuCodeDumpe,str(dico)) - print ('uuuuuuuuuuuuuuuuuuuuuu', dico) + #print ('uuuuuuuuuuuuuuuuuuuuuu', dico) if dico != {} : self.texteXSD += texteAnnotation.format(str(dico)) #import pprint diff --git a/Efi2Xsd/MCAccasXML.py b/Efi2Xsd/MCAccasXML.py index d8f5b008..a2aea67e 100755 --- a/Efi2Xsd/MCAccasXML.py +++ b/Efi2Xsd/MCAccasXML.py @@ -34,7 +34,7 @@ try : import pyxb.binding import pyxb.binding.basis #import pyxb.utils.utility - #import pyxb.utils.domutils + import pyxb.utils.domutils except : pass from Accas import A_ASSD @@ -156,7 +156,6 @@ class X_MCSIMP(X_OBJECT): self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) if self.waitMatrice() : - debug=True #PNPN : Attention rien ne relie les objets listeObjPyxb a un objAccas # 27/04 je ne sais pas si cela posera pb self.listeLines = [] @@ -265,7 +264,6 @@ class X_MCCOMPO(X_OBJECT) : def buildObjPyxb(self,mc_list, debug=False) : if not self.cata or not self.cata.modeleMetier : return - if self.nom == 'Techno_data' : debug=1 if debug : print ('X_MCCOMPO', self.nom) deepDebug=False self.listArg=[] @@ -473,15 +471,16 @@ class X_JDC (X_MCCOMPO): - def enregistreEtapePyxb(self,etape,indice=0): + def enregistreEtapePyxb(self,etape,indice=0, debug=False): # ne fonctionne pas : a reecrire avec les fonctions addObjPyxb et ReconstruitPerePyxb # ne contient pas indice pour l insant - print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh') - print ('enregistre ds ',self, etape.nom, 'indice = ', indice) + + if debug : print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh') + if debug : print ('enregistre ds ',self, etape.nom, 'indice = ', indice) if etape.nature == 'COMMENTAIRE' : return if not self.cata.modeleMetier : return - print ('etape.objPyxb', etape.objPyxb) - print (etape.objPyxb.toDOM(element_name='RN_EDG').toprettyxml()) + if debug : print ('etape.objPyxb', etape.objPyxb) + if debug : print (etape.objPyxb.toDOM(element_name='RN_EDG').toprettyxml()) self.objPyxb.append(etape.objPyxb) etape.perePyxb = self @@ -499,19 +498,30 @@ class X_JDC (X_MCCOMPO): #except pyxb.ValidationError as e: # print(e.details()) - def toXml(self,fichier=None, debug=True): + def toXml(self,fichier=None, debug=False): if debug : print ('ds to XML') if not self.cata or not self.cata.modeleMetier : return - if debug : print (' to xml ***************',self.objPyxb,'***************',) - if debug : print (' to xml ***************',self,'***************',) - if debug : print (' to xml ***************',self.objPyxb.orderedContent(),'***************',) - if debug : print(self.objPyxb.toDOM().toprettyxml()) - if debug : print(self.objPyxb.toxml()) + #if debug : print (' to xml ***************',self.objPyxb,'***************',) + #if debug : print (' to xml ***************',self,'***************',) + #if debug : print (' to xml ***************',self.objPyxb.orderedContent(),'***************',) + #if debug : print(self.objPyxb.toDOM().toprettyxml()) + #if debug : print(self.objPyxb.toxml()) + #ns1 = pyxb.namespace.Namespace("xsi:schemaLocation") + #monUri='http://chercheurs.edf.com/logiciels/{} {}'.format(self.code,os.path.basename(self.cata.fileModeleMetier)) + #print ('monUri', monUri) + #pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, monUri) + + ns1 = pyxb.namespace.Namespace("http://www.w3.org/2001/XMLSchema-instance") + pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, 'xsi') + texteXML = self.objPyxb.toDOM().toprettyxml() + if debug : print (texteXML) + if debug : print ('__________________________________________________________________________') + #enteteXML = ' appel ds analyseXML de I_JDC.py") + if debug : print ("je suis ds analyseFromXML -- > appel ds analyseXML de I_JDC.py") if self.procedure == "" : return self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure) if not hasattr(self.cata.modeleMetier,'AccasUserAssd'): diff --git a/Efi2Xsd/balisesXSD.py b/Efi2Xsd/balisesXSD.py index 9512763e..64d2c9a6 100644 --- a/Efi2Xsd/balisesXSD.py +++ b/Efi2Xsd/balisesXSD.py @@ -121,14 +121,6 @@ finEltCataSimple = '\t\t \n\t\t\n' #\n\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' @@ -139,7 +131,7 @@ tupleFinComplexeType = '\n\t\t\n\t\n' # MATRICE 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\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\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' -- 2.39.2