From 06180a3cd8f378711cd2da92a8caf18f2c95fb55 Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Thu, 8 Oct 2020 17:46:05 +0200 Subject: [PATCH] partage Eric --- Efi2Xsd/AccasXsd.py | 95 ++++++++++++++++---------------------- InterfaceQT4/readercata.py | 7 ++- 2 files changed, 47 insertions(+), 55 deletions(-) diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index 7973942d..e3c5f81e 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -131,7 +131,7 @@ class X_definition: else : cata.dictTypesXSD[nom].append(self) - def definitNomDuTypePyxb(self,debug=False): + def definitNomDuTypePyxb(self,forceACreer=False,debug=False): if debug : print ('definitNomDuTypePyxb', self, self.nom,self.nomComplet()) if hasattr(self,'nomDuTypePyxb') : self.aCreer = False; return self.nomDuTypePyxb @@ -148,23 +148,24 @@ class X_definition: self.nomDuTypePyxb=nom return nom - self.aCreer = False if nom == 'T_Consigne' : return nom - listePossible=cata.dictTypesXSD[nom] - indice=0 - while (indice < len(listePossible)) : - objAComparer=listePossible[indice] - if self.compare(objAComparer) : - self.nomDuTypePyxb=objAComparer.nomDuTypePyxb - if debug : print ('definitNomDuTypePyxb', self.nom , 'type identique', objAComparer.nomDuTypePyxb ) + if not forceACreer : + self.aCreer = False + listePossible=cata.dictTypesXSD[nom] + indice=0 + while (indice < len(listePossible)) : + objAComparer=listePossible[indice] + if self.compare(objAComparer) : + self.nomDuTypePyxb=objAComparer.nomDuTypePyxb + if debug : print ('definitNomDuTypePyxb', self.nom , 'type identique', objAComparer.nomDuTypePyxb ) # c est nul pour la comparaison mais cela permet d etre ok dans le dictionnaire passe a Accas - cata.dictTypesXSD[nom].append(self) - if self.label != 'SIMP' : - if objAComparer not in list(cata.dictTypesXSDJumeaux.keys()) : cata.dictTypesXSDJumeaux[objAComparer]=[self,] - else : cata.dictTypesXSDJumeaux[objAComparer].append(self) - return objAComparer.nomDuTypePyxb - indice += 1 + cata.dictTypesXSD[nom].append(self) + if self.label != 'SIMP' : + if objAComparer not in list(cata.dictTypesXSDJumeaux.keys()) : cata.dictTypesXSDJumeaux[objAComparer]=[self,] + else : cata.dictTypesXSDJumeaux[objAComparer].append(self) + return objAComparer.nomDuTypePyxb + indice += 1 self.aCreer = True cata.dictTypesXSD[nom].append(self) nomAlter='T_'+self.nom+'_'+str(indice) @@ -179,7 +180,6 @@ class X_compoFactoriseAmbigu(X_definition): # ---------------------------------------- def __init__(self,nom,listeDeCreation,pere): - #print ('__ X_compoFactoriseAmbigu', listeDeCreation) #for (i,index) in listeDeCreation : print i.nom self.label='BlocAmbigu' self.nom=nom @@ -188,7 +188,6 @@ class X_compoFactoriseAmbigu(X_definition): self.entites={} self.mcXSD=[] self.ordre_mc=[] - self.mcDejaDumpe=set() for mc in listeDeCreation : self.mcXSD.append(mc) self.ordre_mc.append(mc.nom) @@ -310,7 +309,7 @@ class X_compoFactoriseAmbigu(X_definition): print ('dans nomComplet pourquoi ?',self, self.nom) - def factoriseEtCreeDump(self, laListe, indent=2 ,nomAppel=None, debug=True): + def factoriseEtCreeDump(self, laListe, indent=2 ,nomAppel=None, debug=False): if debug : print ('_______________________________ factoriseEtCreeDump') if debug : print(self.nom, laListe, indent, nomAppel) maListeRetour=[] @@ -379,12 +378,11 @@ class X_compoFactoriseAmbigu(X_definition): return (maListeRetour) - def ajouteAuxTextes(self,nomMC,indent) : - #if nomMC =='FactE' : - # import traceback - # traceback.print_stack() - #print ('ajouteAuxTextes', nomMC, self.nom, self.entites) - if nomMC =='B' :print ('ajouteAuxTextes', nomMC, self.nom) + def ajouteAuxTextes(self,nomMC,indent,debug=False) : + if nomMC=='N1' and self.nom == 'bloc_une_bloc_deux' : debug=True + if debug : print ('ajouteAuxTextes', nomMC, self.nom, self.entites[nomMC]) + #if debug : + # traceback.print_stack() #for i in self.entites.keys() : print (self.entites[i][0].nom) if (indent > 3) : indent = indent - 3 else : indent = 0 @@ -464,7 +462,7 @@ class X_compoFactoriseAmbigu(X_definition): class X_definitionComposee (X_definition): # ------------------------------------------ - def CreeTexteComplexeVenantDesFils(self,dansFactorisation=False): + def creeTexteComplexeVenantDesFils(self,dansFactorisation=False): texteComplexeVenantDesFils="" blocsDejaDumpes=set() #for nom in self.ordre_mc: @@ -487,14 +485,16 @@ class X_definitionComposee (X_definition): if mcFils.aCreer : texteComplexeVenantDesFils += mcFils.texteComplexe return texteComplexeVenantDesFils - def dumpXsd(self, dansFactorisation=False, multiple = False, first=False): + def dumpXsd(self, dansFactorisation=False, multiple = False, first=True): #print ('_________ dumpXsd___________', self.nom) if PourTraduction : print (self.nom) # le prepareDump est appele sur les fils if not (self.dejaPrepareDump) : self.prepareDumpXSD() self.getNomDuCodeDumpe() - self.nomDuTypePyxb = self.definitNomDuTypePyxb() + if first : + if multiple : self.nomDuTypePyxb = self.definitNomDuTypePyxb(forceACreer) + else : self.nomDuTypePyxb = self.definitNomDuTypePyxb() self.texteSimple = "" # on n ajoute pas de type simple self.traduitMinMax() @@ -505,7 +505,7 @@ class X_definitionComposee (X_definition): if isinstance(self,X_OPER) or isinstance(self,X_PROC) : self.texteComplexe += debutTypeCompoEtape.format(self.code) self.texteComplexe += debutTypeCompoSeq - texteComplexeVenantDesFils=self.CreeTexteComplexeVenantDesFils(dansFactorisation) + texteComplexeVenantDesFils=self.creeTexteComplexeVenantDesFils(dansFactorisation) self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe # la fin de l oper est traitee dans le dumpXSD de X_OPER if not isinstance(self,X_OPER ) : self.texteComplexe += finTypeCompoSeq @@ -706,7 +706,7 @@ class X_BLOC (X_definitionComposee): # Pour les blocs le minOccurs vaut 0 et le max 1 if self.aCreer : self.texteComplexe = debutTypeSubst.format(self.nomDuTypePyxb) - texteComplexeVenantDesFils=self.CreeTexteComplexeVenantDesFils(dansFactorisation) + texteComplexeVenantDesFils=self.creeTexteComplexeVenantDesFils(dansFactorisation) self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe self.texteComplexe += finTypeSubst @@ -754,6 +754,7 @@ class X_SIMP (X_definition): def dumpXsd(self, dansFactorisation=False, multiple = False, first=False): #if PourTraduction : print (self.nom) self.prepareDumpXSD() + # si inUnion la comparaison est fausse : on cree le nomDuType if multiple : self.inUnion=True #print ('exploreObjet SIMP') self.getNomDuCodeDumpe() @@ -765,17 +766,14 @@ class X_SIMP (X_definition): # --> homonymie on peut utiliser genealogie ? self.nomDuTypeDeBase = self.traduitType() - #if not multiple : - # self.nomDuTypePyxb = self.definitNomDuTypePyxb() - #if first : self.aCreer = True - #elif first : - #else : - # self.nomDuTypePyxb = self.definitNomDuTypePyxb() - #self.aCreer = True - #else : print ('multiple and not first', self.aCreer) - self.definitNomDuTypePyxb() + if not multiple : + self.nomDuTypePyxb = self.definitNomDuTypePyxb() + else : + if first : + # on force la creation + self.nomDuTypePyxb = self.definitNomDuTypePyxb() + self.aCreer = True - # on se sert des listes ou non pour la gestion des minOccurs /maxOccurs est > 0 if self.statut =='f' : minOccurs = 0 @@ -845,10 +843,8 @@ class X_SIMP (X_definition): def prepareDumpXSD(self): self.inUnion=False - if self.statut == 'f' : - self.arbrePossibles = (self.nom,[]) - else : - self.arbrePossibles = (self.nom,) + if self.statut == 'f' : self.arbrePossibles = (self.nom,[]) + else : self.arbrePossibles = (self.nom,) self.mcXSD=[] @@ -1087,33 +1083,24 @@ class X_JDC_CATA : if definition.label == 'BLOC' or definition.label == 'BlocAmbigu':continue if definition.nomDuTypePyxb == 'T_'+definition.nom : continue listeATraiter=[definition.geneaCompleteSousFormeDeListe(),] - print (1,listeATraiter) while listeATraiter != [] : listeGenea=listeATraiter[0] listeATraiter=listeATraiter[1:] - print (2,listeATraiter) txtNomComplet='' indexMC=0 for MC in listeGenea: - #print (MC.nom) - #print (listeGenea) - #for e in listeGenea : print (e.nom) txtNomComplet=txtNomComplet+'_'+MC.nom if MC in list(cata.dictTypesXSDJumeaux.keys()) : - print ("aCrrer", indexMC) + #print ("aCrrer", indexMC) for MCJumeau in cata.dictTypesXSDJumeaux[MC]: # attention nvlleGenalogie n a pas de sens en Accas nvlleGenalogie=listeGenea[:indexMC]+MCJumeau.geneaCompleteSousFormeDeListe() listeATraiter.append(nvlleGenalogie) indexMC=indexMC+1 - print (3,listeATraiter) - print ('1',txtNomComplet) - print ('11',definition.nomComplet()) dico[k][txtNomComplet]=definition.nomDuTypePyxb if dico[k]== {} : del dico[k] - #dico = {} import pprint - pprint.pprint(dico) + #pprint.pprint(dico) if dico != {} : self.texteXSD += texteAnnotation.format(str(dico)) #import pprint diff --git a/InterfaceQT4/readercata.py b/InterfaceQT4/readercata.py index cf267055..2a705dd2 100644 --- a/InterfaceQT4/readercata.py +++ b/InterfaceQT4/readercata.py @@ -226,6 +226,7 @@ class ReaderCata (ReaderCataCommun): self.QWParent.informe('environnement', 'please source pyxb environment') exit() try : + if 1 : nomCataXsd = os.path.splitext(os.path.basename(self.fichierCata))[0] fichierCataTrunc=os.path.splitext(os.path.basename(self.fichierCata))[0] nomCataXsd = fichierCataTrunc+'_driver' @@ -233,7 +234,10 @@ class ReaderCata (ReaderCataCommun): import imp modeleMetier= imp.load_source(nomCataXsd,pathCata) #print ('nomCataXsd , pathCata ',nomCataXsd,pathCata) - texte=modeleMetier.PNEFdico.__doc__ + try : + texte=modeleMetier.PNEFdico.__doc__ + except : + texte=None if texte != None and texte != "": l={} texte='dicoEltDif = '+ texte @@ -241,6 +245,7 @@ class ReaderCata (ReaderCataCommun): dicoEltDif=l['dicoEltDif'] except : + #else : if self.appliEficas.ssIhm == False :print ('______________ poum import cata_genere ') self.QWParent.informe('XSD driver', 'unable to load xsd driver',critique=False) modeleMetier = None -- 2.39.2