From: pascale.noyret Date: Thu, 25 Mar 2021 18:03:44 +0000 (+0100) Subject: reindent Efi2Xsd X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=e46a4f8218126d362d2628962addd81d79cb04d8;p=tools%2Feficas.git reindent Efi2Xsd --- diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index 33580963..99b60287 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -34,620 +34,620 @@ from .balisesXSD import * # ----------------- class X_definition: # ----------------- - def adjoint(self, liste1, liste2): - #print ('adjoint', liste1, liste2) - l=[] - for elt1 in liste1: - for elt2 in liste2: - newListe=deepcopy(elt1) - if elt2 != []: newListe.append(elt2) - l.append(newListe) - return l - - def adjointUnMot(self, liste1, mot): - l=[] - for elt1 in liste1: - newListe=deepcopy(elt1) - newListe.append(mot) - l.append(newListe) - return l - - def remplaceListeParContenuEtVide(self, liste1, liste2): - listeFinale=[] - for elt1 in liste1 : - for eltListe in liste2: - newListe=deepcopy(elt1) - if eltListe!=[] :newListe+=eltListe - if newListe not in listeFinale : listeFinale.append(newListe) - return listeFinale - - - def fusionne2Listes(self, liste1, liste2): - #print ('fusionne2Liste', liste1, liste2) - listeFinale=[] - for elt1 in liste1 : - for eltListe in liste2: - newListe=deepcopy(elt1) - if eltListe!=[] :newListe.append(eltListe) - listeFinale.append(newListe) - #print (listeFinale) - return listeFinale - - def getNomDuCodeDumpe(self): - if hasattr(self,'nomDuCodeDumpe') : return - obj=self - while ( not hasattr(obj,'nomDuCodeDumpe') ): obj=obj.pere - self.nomDuCodeDumpe = obj.nomDuCodeDumpe - self.code=obj.code - - def getXPathComplet(self): - obj=self - textePath='/'+self.code+":"+self.nom - while ( hasattr(obj,'pere') ): - obj=obj.pere - if isinstance(obj, X_BLOC) : continue - textePath= '/'+ self.code + ":" + obj.nom + textePath - textePath='.' + textePath - return textePath - - def getXPathSansSelf(self): - obj=self - textePath='' - while ( hasattr(obj,'pere') ): - obj=obj.pere - if isinstance(obj, X_BLOC) : continue - textePath= self.code + ":" + obj.nom + '/' + textePath - textePath='./'+ self.code + ":" + textePath - return textePath - - def getNomCompletAvecBloc(self): - obj=self - texteNom=self.nom - while ( hasattr(obj,'pere') ): - texteNom=obj.pere.nom+'_'+texteNom - obj=obj.pere - return texteNom - - def metAJourPyxb(self,nomDuTypePyxb) : - self.aCreer=False - self.nomDuTypePyxb=nomDuTypePyxb - cata = CONTEXT.getCurrentCata() - nom='T_'+self.nom - if (hasattr (self, 'nomXML')) and self.nomXML != None : nom='T_'+self.nomXML - if not (nom in cata.dictTypesXSD.keys()) : - cata.dictTypesXSD[nom] = [self,] - else : - cata.dictTypesXSD[nom].append(self) - - 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 - #debug=False - if debug : print ('definitNomDuTypePyxb traitement pour ', self.nom) - self.aCreer = True - cata = CONTEXT.getCurrentCata() - nom='T_'+self.nom - if (hasattr (self, 'nomXML')) and self.nomXML != None : nom='T_'+self.nomXML - if not (nom in cata.dictTypesXSD.keys()) : - if debug : print ('definitNomDuTypePyxb encore jamais traite ', self.nom , ' a pour type' , nom) - cata.dictTypesXSD[nom] = [self,] - self.nomDuTypePyxb=nom - return nom - - if nom == 'T_Consigne' : return nom - - if not forceACreer : - self.aCreer = False - listePossible=cata.dictTypesXSD[nom] - indice=0 - while (indice < len(listePossible)) : - objAComparer=listePossible[indice] - if debug : print (self.compare) - if self.compare(objAComparer) : - self.nomDuTypePyxb=objAComparer.nomDuTypePyxb - if debug : print (self, objAComparer) - if debug : print (type(self), type(objAComparer)) - 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 - self.aCreer = True - cata.dictTypesXSD[nom].append(self) - nomAlter='T_'+self.nom+'_'+str(indice) - if (hasattr (self, 'nomXML')) and self.nomXML != None : - nomAlter='T_'+self.nomXML+'_'+str(indice) - self.nomDuTypePyxb=nomAlter - return nomAlter + def adjoint(self, liste1, liste2): + #print ('adjoint', liste1, liste2) + l=[] + for elt1 in liste1: + for elt2 in liste2: + newListe=deepcopy(elt1) + if elt2 != []: newListe.append(elt2) + l.append(newListe) + return l + + def adjointUnMot(self, liste1, mot): + l=[] + for elt1 in liste1: + newListe=deepcopy(elt1) + newListe.append(mot) + l.append(newListe) + return l + + def remplaceListeParContenuEtVide(self, liste1, liste2): + listeFinale=[] + for elt1 in liste1 : + for eltListe in liste2: + newListe=deepcopy(elt1) + if eltListe!=[] :newListe+=eltListe + if newListe not in listeFinale : listeFinale.append(newListe) + return listeFinale + + + def fusionne2Listes(self, liste1, liste2): + #print ('fusionne2Liste', liste1, liste2) + listeFinale=[] + for elt1 in liste1 : + for eltListe in liste2: + newListe=deepcopy(elt1) + if eltListe!=[] :newListe.append(eltListe) + listeFinale.append(newListe) + #print (listeFinale) + return listeFinale + + def getNomDuCodeDumpe(self): + if hasattr(self,'nomDuCodeDumpe') : return + obj=self + while ( not hasattr(obj,'nomDuCodeDumpe') ): obj=obj.pere + self.nomDuCodeDumpe = obj.nomDuCodeDumpe + self.code=obj.code + + def getXPathComplet(self): + obj=self + textePath='/'+self.code+":"+self.nom + while ( hasattr(obj,'pere') ): + obj=obj.pere + if isinstance(obj, X_BLOC) : continue + textePath= '/'+ self.code + ":" + obj.nom + textePath + textePath='.' + textePath + return textePath + + def getXPathSansSelf(self): + obj=self + textePath='' + while ( hasattr(obj,'pere') ): + obj=obj.pere + if isinstance(obj, X_BLOC) : continue + textePath= self.code + ":" + obj.nom + '/' + textePath + textePath='./'+ self.code + ":" + textePath + return textePath + + def getNomCompletAvecBloc(self): + obj=self + texteNom=self.nom + while ( hasattr(obj,'pere') ): + texteNom=obj.pere.nom+'_'+texteNom + obj=obj.pere + return texteNom + + def metAJourPyxb(self,nomDuTypePyxb) : + self.aCreer=False + self.nomDuTypePyxb=nomDuTypePyxb + cata = CONTEXT.getCurrentCata() + nom='T_'+self.nom + if (hasattr (self, 'nomXML')) and self.nomXML != None : nom='T_'+self.nomXML + if not (nom in cata.dictTypesXSD.keys()) : + cata.dictTypesXSD[nom] = [self,] + else : + cata.dictTypesXSD[nom].append(self) + + 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 + #debug=False + if debug : print ('definitNomDuTypePyxb traitement pour ', self.nom) + self.aCreer = True + cata = CONTEXT.getCurrentCata() + nom='T_'+self.nom + if (hasattr (self, 'nomXML')) and self.nomXML != None : nom='T_'+self.nomXML + if not (nom in cata.dictTypesXSD.keys()) : + if debug : print ('definitNomDuTypePyxb encore jamais traite ', self.nom , ' a pour type' , nom) + cata.dictTypesXSD[nom] = [self,] + self.nomDuTypePyxb=nom + return nom + + if nom == 'T_Consigne' : return nom + + if not forceACreer : + self.aCreer = False + listePossible=cata.dictTypesXSD[nom] + indice=0 + while (indice < len(listePossible)) : + objAComparer=listePossible[indice] + if debug : print (self.compare) + if self.compare(objAComparer) : + self.nomDuTypePyxb=objAComparer.nomDuTypePyxb + if debug : print (self, objAComparer) + if debug : print (type(self), type(objAComparer)) + 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 + self.aCreer = True + cata.dictTypesXSD[nom].append(self) + nomAlter='T_'+self.nom+'_'+str(indice) + if (hasattr (self, 'nomXML')) and self.nomXML != None : + nomAlter='T_'+self.nomXML+'_'+str(indice) + self.nomDuTypePyxb=nomAlter + return nomAlter # ---------------------------------------- class X_compoFactoriseAmbigu(X_definition): # ---------------------------------------- - def __init__(self,nom,listeDeCreation,pere, debug=False): - #if nom == 'blocFormatFichierMed_blocFormatFichierAll' : debug = True - # import traceback - # traceback.print_stack() - if debug : - for (i) in listeDeCreation : print (i.nom) - self.label='BlocAmbigu' - self.nom=nom - self.pere=pere - self.statut='f' - self.entites={} - self.mcXSD=[] - self.ordre_mc=[] - for mc in listeDeCreation : - self.mcXSD.append(mc) - self.ordre_mc.append(mc.nom) - - if debug : print (self.mcXSD) - if debug : print (self.ordre_mc) - self.construitEntites(self.mcXSD) - self.constructionArbrePossibles() - lesPossibles=deepcopy(self.arbrePossibles) - - self.getNomDuCodeDumpe() - self.nomDuTypePyxb = self.definitNomDuTypePyxb() - if debug : print (self.nomDuTypePyxb) - self.texteSimple = '' - self.texteComplexeVenantDesFils = '' - self.texteComplexe = debutTypeSubstDsBlocFactorise.format(self.nomDuTypePyxb) - # on enleve [] des possibles puisque l elt sera optionnel - lesPossibles.remove([]) - if debug : print ('________________ init de compoAmbigu',self.nom, lesPossibles) - if debug : print ('self.entites', self.entites) - self.mcXSD=self.factoriseEtCreeDump(lesPossibles,nomAppel='Root') - if debug : print ('self.mcXSD',self.mcXSD) - self.texteComplexe += finTypeSubstDsBlocFactorise - self.texteComplexe +=self.texteComplexeVenantDesFils - #print ('fin pour prepareDumpXSD pour', self.nom) - - def compare(self,autreMC): - if self.label != autreMC.label : return False - #PN : le bug est la - # arbre des possibles identiques mais les types different - # comment faire ? - #print (self.arbrePossibles) - #print (autreMC.arbrePossibles) - #if self.arbrePossibles== autreMC.arbrePossibles : return True - return False - - def construitEntites(self, laListe): - for mc in laListe : - if mc.nom in self.entites.keys() : self.entites[mc.nom].append(mc) - else : self.entites[mc.nom] = [mc,] - if mc.label == 'BLOC' or mc.label == 'BlocAmbigu': - self.ajouteLesMCFilsAEntite(mc) - - - def ajouteLesMCFilsAEntite(self,blocMc): - for mcFilsNom in blocMc.entites.keys(): - if mcFilsNom == 'Consigne' or mcFilsNom == 'blocConsigne' : continue - if mcFilsNom not in self.entites.keys(): self.entites[mcFilsNom]=[] - if blocMc.label == 'BlocAmbigu' : - for mc in blocMc.entites[mcFilsNom] : - self.entites[mcFilsNom].append(mc) - if mc.label == 'BLOC' or mc.label == 'BlocAmbigu': + def __init__(self,nom,listeDeCreation,pere, debug=False): + #if nom == 'blocFormatFichierMed_blocFormatFichierAll' : debug = True + # import traceback + # traceback.print_stack() + if debug : + for (i) in listeDeCreation : print (i.nom) + self.label='BlocAmbigu' + self.nom=nom + self.pere=pere + self.statut='f' + self.entites={} + self.mcXSD=[] + self.ordre_mc=[] + for mc in listeDeCreation : + self.mcXSD.append(mc) + self.ordre_mc.append(mc.nom) + + if debug : print (self.mcXSD) + if debug : print (self.ordre_mc) + self.construitEntites(self.mcXSD) + self.constructionArbrePossibles() + lesPossibles=deepcopy(self.arbrePossibles) + + self.getNomDuCodeDumpe() + self.nomDuTypePyxb = self.definitNomDuTypePyxb() + if debug : print (self.nomDuTypePyxb) + self.texteSimple = '' + self.texteComplexeVenantDesFils = '' + self.texteComplexe = debutTypeSubstDsBlocFactorise.format(self.nomDuTypePyxb) + # on enleve [] des possibles puisque l elt sera optionnel + lesPossibles.remove([]) + if debug : print ('________________ init de compoAmbigu',self.nom, lesPossibles) + if debug : print ('self.entites', self.entites) + self.mcXSD=self.factoriseEtCreeDump(lesPossibles,nomAppel='Root') + if debug : print ('self.mcXSD',self.mcXSD) + self.texteComplexe += finTypeSubstDsBlocFactorise + self.texteComplexe +=self.texteComplexeVenantDesFils + #print ('fin pour prepareDumpXSD pour', self.nom) + + def compare(self,autreMC): + if self.label != autreMC.label : return False + #PN : le bug est la + # arbre des possibles identiques mais les types different + # comment faire ? + #print (self.arbrePossibles) + #print (autreMC.arbrePossibles) + #if self.arbrePossibles== autreMC.arbrePossibles : return True + return False + + def construitEntites(self, laListe): + for mc in laListe : + if mc.nom in self.entites.keys() : self.entites[mc.nom].append(mc) + else : self.entites[mc.nom] = [mc,] + if mc.label == 'BLOC' or mc.label == 'BlocAmbigu': self.ajouteLesMCFilsAEntite(mc) - else : - self.entites[mcFilsNom].append(blocMc.entites[mcFilsNom]) - if blocMc.entites[mcFilsNom].label == 'BLOC' or blocMc.entites[mcFilsNom].label == 'BlocAmbigu': - self.ajouteLesMCFilsAEntite(blocMc.entites[mcFilsNom]) - - - - - def constructionArbrePossibles(self, debug = False): - if debug : print ('construction pour FACT ambigu _______________', self.nom) - toutesLesLignes=[[]] - for child in self.mcXSD : - if not hasattr(child, 'arbrePossibles') : child.construitArbrePossibles() - if child.label != 'BLOC' : - toutesLesLignes = deepcopy(self.fusionne2Listes(toutesLesLignes, child.arbrePossibles)) - else : - toutesLesLignes = deepcopy(self.fusionne2Listes(toutesLesLignes, [child.nom, []])) - - lignesAGarder=[] - for ligne in toutesLesLignes: - blocContenus=[] - aAjouter=True - for mc in ligne : - objMC=self.entites[mc][0] - if objMC.label == 'BLOC' : - blocContenus.append(objMC) - for b in blocContenus : - for frere in blocContenus[blocContenus.index(b)+1:]: - if b.isDisjoint(frere) : continue - aAjouter=False - break - if not aAjouter : break - if aAjouter and ligne not in lignesAGarder : - lignesAGarder.append(ligne) - - #print ("______________________________________") - #for l in lignesAGarder : print (l) - #print (len(lignesAGarder)) - #print ("______________________________________") - self.arbrePossibles=[] - for ligne in lignesAGarder : - #print ('lignesAGarder', ligne) - for newLigne in self.deploye(ligne): - #print (newLigne) - if newLigne not in self.arbrePossibles : self.arbrePossibles.append(newLigne) - #for l in self.arbrePossibles : print (l) - #print ("______________________________________") - - - def deploye (self, ligne): - toutesLesLignes=[[]] - for mc in ligne : - #print ( 'mc in deploye', mc) - objMC=self.entites[mc][0] - #print ( 'nom', objMC.nom, objMC.label) - if objMC.label == 'BLOC' or objMC.label == 'BlocAmbigu': - toutesLesLignes = deepcopy(self.remplaceListeParContenuEtVide(toutesLesLignes, objMC.arbrePossibles)) - else : - toutesLesLignes = deepcopy(self.adjointUnMot(toutesLesLignes,mc )) - return toutesLesLignes - - def construitArbrePossibles(self): - # inutile car on a deja l arbre mais appele parfois - #print ('dans X_factCompoAmbigu ne fait rien', self.nom, self.arbrePossibles) - pass - - def dumpXsd(self, dansFactorisation=False, multiple = False, first=False): - # on ne fait rien, tout a ete fait dans le init - self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1) - - def nomComplet(self) : - print ('dans nomComplet pourquoi ?',self, self.nom) - - - def factoriseEtCreeDump(self, laListe, indent=2 ,nomAppel=None, debug=False): - if debug : print ('_______________________________ factoriseEtCreeDump') - if debug : print(self.nom, laListe, indent, nomAppel) - maListeRetour=[] - aReduire={} - - if [] in laListe : - declencheChoiceAvecSeqVid=True - while [] in laListe : laListe.remove([]) - #min=0 - else : - declencheChoiceAvecSeqVid=False - #min=1 - - - for ligne in laListe : - if ligne[0] in aReduire.keys(): - if len(ligne) == 1 :aReduire[ligne[0]].append([]) - else : aReduire[ligne[0]].append(ligne[1:]) - else : - if len(ligne) == 1 : aReduire[ligne[0]]=[[]] - else : aReduire[ligne[0]]=[ligne[1:],] - - - if len(aReduire.keys()) == 1 : - if declencheChoiceAvecSeqVid == False : - creeChoice=False - creeSequence=True - self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1 - else : - creeChoice=True - creeSequence=False - # pour regler le souci du 1er Niveau - self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1 - #if min == 1 : self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1 - #else : self.texteComplexe += '\t'*indent + debutChoiceDsBlocAvecMin.format(min); indent=indent+1 - else : - #self.texteComplexe += '\t'*indent + debutChoiceDsBlocAvecMin.format(min); indent=indent+1 - self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1 - creeChoice=True - creeSequence=False - - for nomMC in aReduire.keys(): - 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 : print (listeSuivante[0]) ;self.ajouteAuxTextes(listeSuivante[0],indent) - else : self.factoriseEtCreeDump(listeSuivante, indent+int(creeSequence),nomMC) - if creeChoice : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc - - if declencheChoiceAvecSeqVid : - self.texteComplexe += '\t'*indent + debSequenceDsBloc - self.texteComplexe += '\t'*indent + finSequenceDsBloc - 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) - return (maListeRetour) - - - def ajouteAuxTextes(self,nomMC,indent,debug=False) : - 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 - - # PN change le 17 fevrier . Est-ce normal d arriver la ? - # if faut traiter les Blocs exclusifs qui donnent des choices de sequences - # mais celles-ci risquent d etre ambigues - while (isinstance(nomMC,list)) : - nomMC=nomMC[0] - - if nomMC == 'Consigne' or nomMC == 'blocConsigne' : return - if len(self.entites[nomMC]) == 1: - mc=self.entites[nomMC][0] - mc.dumpXsd(dansFactorisation=True) - self.texteComplexe += '\t'*(indent) + mc.texteElt - if mc.aCreer : self.texteComplexeVenantDesFils += mc.texteComplexe - if mc.aCreer : self.texteSimple += mc.texteSimple - if mc.aCreer : mc.aCreer=False - return - - leType=type(self.entites[nomMC][0]) - for e in (self.entites[nomMC][1:]) : - if type(e) != leType: - print ('Projection XSD impossible, changez un des ', nomMC) - exit() - - # cette boucle ne fonctionne que pour des SIMP - resteATraiter=copy(self.entites[nomMC]) - #print ('________resteATraiter', resteATraiter) - listePourUnion=[] - first=1 - while resteATraiter != [] : - nvlListeATraiter=[] - mc=resteATraiter[0] - listePourUnion.append(mc) - for autre in resteATraiter[1:]: - if not (mc.compare(autre)) : nvlListeATraiter.append(autre) - resteATraiter=copy(nvlListeATraiter) - - if len(listePourUnion) == 1: - mc=listePourUnion[0] - mc.dumpXsd(dansFactorisation=True,multiple=False,first=first) - self.texteComplexe += '\t'*(indent) + mc.texteElt - if mc.aCreer : self.texteComplexeVenantDesFils += mc.texteComplexe - if mc.aCreer : self.texteSimple += mc.texteSimple - for mcIdent in self.entites[nomMC][1:]: mcIdent.metAJourPyxb(mc.nomDuTypePyxb) - if mc.aCreer : mc.aCreer=False - return - - # on ajoute le nom de l element - # PN : attention on dumpe 2 fois - self.entites[nomMC][0].dumpXsd(dansFactorisation=True,multiple=True,first=first) - if not (isinstance(self.entites[nomMC][0], Accas.SIMP)) : - print ('2 blocs freres ont le meme nom et pas le meme type : pas encore traite') - print ('Projection XSD impossible, changez un des ', nomMC) - exit() - self.texteComplexe += '\t'*(indent) + self.entites[nomMC][0].texteElt - nomTypePyxbUnion=self.entites[nomMC][0].nomDuTypePyxb - texteSimpleUnion=debutSimpleType.format(nomTypePyxbUnion) - texteSimpleUnion+=debutUnion - #if len(listePourUnion) == 1 : - #PN 29 septembre 20. Est ce que ce if a un sens - # si len(listePourUnion==1) on est deja sorti non ? - # mc=self.entites[nomMC][0] - # mc.dumpXsd(dansFactorisation=True,multiple=True,first=first) - # inutile - deja fait plus haut - # if mc.aCreer : self.texteComplexeVenantDesFils += mc.texteComplexe - # if mc.aCreer : self.texteSimple += mc.texteSimple - #else : - texteSimpleUnion += '\t'*(indent)+self.entites[nomMC][0].texteSimplePart2 - texteSimplePart1= self.entites[nomMC][0].texteSimplePart1 - for e in listePourUnion[1:] : - e.dumpXsd(dansFactorisation=True,multiple=True,first=False) - # si on ext un mc simple la ligne suivante est inutile - # en revanche on ajoute le texte a tous les coups - #self.texteComplexeVenantDesFils += e.texteComplexe - e.metAJourPyxb(nomTypePyxbUnion) - texteSimpleUnion += '\t'*(indent) + e.texteSimplePart2 - texteSimplePart1 += e.texteSimplePart1 - texteSimpleUnion += finUnion - texteSimpleUnion+=fermeSimpleType - self.texteSimple += texteSimplePart1 + texteSimpleUnion - #print ('self.texteSimple', self.texteSimple) - + + + def ajouteLesMCFilsAEntite(self,blocMc): + for mcFilsNom in blocMc.entites.keys(): + if mcFilsNom == 'Consigne' or mcFilsNom == 'blocConsigne' : continue + if mcFilsNom not in self.entites.keys(): self.entites[mcFilsNom]=[] + if blocMc.label == 'BlocAmbigu' : + for mc in blocMc.entites[mcFilsNom] : + self.entites[mcFilsNom].append(mc) + if mc.label == 'BLOC' or mc.label == 'BlocAmbigu': + self.ajouteLesMCFilsAEntite(mc) + else : + self.entites[mcFilsNom].append(blocMc.entites[mcFilsNom]) + if blocMc.entites[mcFilsNom].label == 'BLOC' or blocMc.entites[mcFilsNom].label == 'BlocAmbigu': + self.ajouteLesMCFilsAEntite(blocMc.entites[mcFilsNom]) + + + + + def constructionArbrePossibles(self, debug = False): + if debug : print ('construction pour FACT ambigu _______________', self.nom) + toutesLesLignes=[[]] + for child in self.mcXSD : + if not hasattr(child, 'arbrePossibles') : child.construitArbrePossibles() + if child.label != 'BLOC' : + toutesLesLignes = deepcopy(self.fusionne2Listes(toutesLesLignes, child.arbrePossibles)) + else : + toutesLesLignes = deepcopy(self.fusionne2Listes(toutesLesLignes, [child.nom, []])) + + lignesAGarder=[] + for ligne in toutesLesLignes: + blocContenus=[] + aAjouter=True + for mc in ligne : + objMC=self.entites[mc][0] + if objMC.label == 'BLOC' : + blocContenus.append(objMC) + for b in blocContenus : + for frere in blocContenus[blocContenus.index(b)+1:]: + if b.isDisjoint(frere) : continue + aAjouter=False + break + if not aAjouter : break + if aAjouter and ligne not in lignesAGarder : + lignesAGarder.append(ligne) + + #print ("______________________________________") + #for l in lignesAGarder : print (l) + #print (len(lignesAGarder)) + #print ("______________________________________") + self.arbrePossibles=[] + for ligne in lignesAGarder : + #print ('lignesAGarder', ligne) + for newLigne in self.deploye(ligne): + #print (newLigne) + if newLigne not in self.arbrePossibles : self.arbrePossibles.append(newLigne) + #for l in self.arbrePossibles : print (l) + #print ("______________________________________") + + + def deploye (self, ligne): + toutesLesLignes=[[]] + for mc in ligne : + #print ( 'mc in deploye', mc) + objMC=self.entites[mc][0] + #print ( 'nom', objMC.nom, objMC.label) + if objMC.label == 'BLOC' or objMC.label == 'BlocAmbigu': + toutesLesLignes = deepcopy(self.remplaceListeParContenuEtVide(toutesLesLignes, objMC.arbrePossibles)) + else : + toutesLesLignes = deepcopy(self.adjointUnMot(toutesLesLignes,mc )) + return toutesLesLignes + + def construitArbrePossibles(self): + # inutile car on a deja l arbre mais appele parfois + #print ('dans X_factCompoAmbigu ne fait rien', self.nom, self.arbrePossibles) + pass + + def dumpXsd(self, dansFactorisation=False, multiple = False, first=False): + # on ne fait rien, tout a ete fait dans le init + self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1) + + def nomComplet(self) : + print ('dans nomComplet pourquoi ?',self, self.nom) + + + def factoriseEtCreeDump(self, laListe, indent=2 ,nomAppel=None, debug=False): + if debug : print ('_______________________________ factoriseEtCreeDump') + if debug : print(self.nom, laListe, indent, nomAppel) + maListeRetour=[] + aReduire={} + + if [] in laListe : + declencheChoiceAvecSeqVid=True + while [] in laListe : laListe.remove([]) + #min=0 + else : + declencheChoiceAvecSeqVid=False + #min=1 + + + for ligne in laListe : + if ligne[0] in aReduire.keys(): + if len(ligne) == 1 :aReduire[ligne[0]].append([]) + else : aReduire[ligne[0]].append(ligne[1:]) + else : + if len(ligne) == 1 : aReduire[ligne[0]]=[[]] + else : aReduire[ligne[0]]=[ligne[1:],] + + + if len(aReduire.keys()) == 1 : + if declencheChoiceAvecSeqVid == False : + creeChoice=False + creeSequence=True + self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1 + else : + creeChoice=True + creeSequence=False + # pour regler le souci du 1er Niveau + self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1 + #if min == 1 : self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1 + #else : self.texteComplexe += '\t'*indent + debutChoiceDsBlocAvecMin.format(min); indent=indent+1 + else : + #self.texteComplexe += '\t'*indent + debutChoiceDsBlocAvecMin.format(min); indent=indent+1 + self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1 + creeChoice=True + creeSequence=False + + for nomMC in aReduire.keys(): + 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 creeChoice : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc + + if declencheChoiceAvecSeqVid : + self.texteComplexe += '\t'*indent + debSequenceDsBloc + self.texteComplexe += '\t'*indent + finSequenceDsBloc + 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) + return (maListeRetour) + + + def ajouteAuxTextes(self,nomMC,indent,debug=False) : + 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 + + # PN change le 17 fevrier . Est-ce normal d arriver la ? + # if faut traiter les Blocs exclusifs qui donnent des choices de sequences + # mais celles-ci risquent d etre ambigues + while (isinstance(nomMC,list)) : + nomMC=nomMC[0] + + if nomMC == 'Consigne' or nomMC == 'blocConsigne' : return + if len(self.entites[nomMC]) == 1: + mc=self.entites[nomMC][0] + mc.dumpXsd(dansFactorisation=True) + self.texteComplexe += '\t'*(indent) + mc.texteElt + if mc.aCreer : self.texteComplexeVenantDesFils += mc.texteComplexe + if mc.aCreer : self.texteSimple += mc.texteSimple + if mc.aCreer : mc.aCreer=False + return + + leType=type(self.entites[nomMC][0]) + for e in (self.entites[nomMC][1:]) : + if type(e) != leType: + print ('Projection XSD impossible, changez un des ', nomMC) + exit() + + # cette boucle ne fonctionne que pour des SIMP + resteATraiter=copy(self.entites[nomMC]) + #print ('________resteATraiter', resteATraiter) + listePourUnion=[] + first=1 + while resteATraiter != [] : + nvlListeATraiter=[] + mc=resteATraiter[0] + listePourUnion.append(mc) + for autre in resteATraiter[1:]: + if not (mc.compare(autre)) : nvlListeATraiter.append(autre) + resteATraiter=copy(nvlListeATraiter) + + if len(listePourUnion) == 1: + mc=listePourUnion[0] + mc.dumpXsd(dansFactorisation=True,multiple=False,first=first) + self.texteComplexe += '\t'*(indent) + mc.texteElt + if mc.aCreer : self.texteComplexeVenantDesFils += mc.texteComplexe + if mc.aCreer : self.texteSimple += mc.texteSimple + for mcIdent in self.entites[nomMC][1:]: mcIdent.metAJourPyxb(mc.nomDuTypePyxb) + if mc.aCreer : mc.aCreer=False + return + + # on ajoute le nom de l element + # PN : attention on dumpe 2 fois + self.entites[nomMC][0].dumpXsd(dansFactorisation=True,multiple=True,first=first) + if not (isinstance(self.entites[nomMC][0], Accas.SIMP)) : + print ('2 blocs freres ont le meme nom et pas le meme type : pas encore traite') + print ('Projection XSD impossible, changez un des ', nomMC) + exit() + self.texteComplexe += '\t'*(indent) + self.entites[nomMC][0].texteElt + nomTypePyxbUnion=self.entites[nomMC][0].nomDuTypePyxb + texteSimpleUnion=debutSimpleType.format(nomTypePyxbUnion) + texteSimpleUnion+=debutUnion + #if len(listePourUnion) == 1 : + #PN 29 septembre 20. Est ce que ce if a un sens + # si len(listePourUnion==1) on est deja sorti non ? + # mc=self.entites[nomMC][0] + # mc.dumpXsd(dansFactorisation=True,multiple=True,first=first) + # inutile - deja fait plus haut + # if mc.aCreer : self.texteComplexeVenantDesFils += mc.texteComplexe + # if mc.aCreer : self.texteSimple += mc.texteSimple + #else : + texteSimpleUnion += '\t'*(indent)+self.entites[nomMC][0].texteSimplePart2 + texteSimplePart1= self.entites[nomMC][0].texteSimplePart1 + for e in listePourUnion[1:] : + e.dumpXsd(dansFactorisation=True,multiple=True,first=False) + # si on ext un mc simple la ligne suivante est inutile + # en revanche on ajoute le texte a tous les coups + #self.texteComplexeVenantDesFils += e.texteComplexe + e.metAJourPyxb(nomTypePyxbUnion) + texteSimpleUnion += '\t'*(indent) + e.texteSimplePart2 + texteSimplePart1 += e.texteSimplePart1 + texteSimpleUnion += finUnion + texteSimpleUnion+=fermeSimpleType + self.texteSimple += texteSimplePart1 + texteSimpleUnion + #print ('self.texteSimple', self.texteSimple) + # ---------------------------------------- class X_definitionComposee (X_definition): # ------------------------------------------ - - def creeTexteComplexeVenantDesFils(self,dansFactorisation=False,debug=False): - texteComplexeVenantDesFils="" - blocsDejaDumpes=set() - #for nom in self.ordre_mc: - # mcFils = self.entites[nom] - if debug : print ('creeTexteComplexeVenantDesFils', self.nom) - for mcFils in self.mcXSD : - if not (isinstance(mcFils, Accas.BLOC)) : - mcFils.dumpXsd(dansFactorisation) - #print (mcFils.texteSimple) - self.texteComplexe += mcFils.texteElt - if mcFils.aCreer : self.texteSimple += mcFils.texteSimple - if mcFils.aCreer : texteComplexeVenantDesFils += mcFils.texteComplexe - else : - if hasattr(mcFils,'nomXML') and mcFils.nomXML in blocsDejaDumpes and mcFils.nomXML != None : continue - if hasattr(mcFils,'nomXML') and mcFils.nomXML != None: blocsDejaDumpes.add(mcFils.nomXML) - mcFils.dumpXsd(dansFactorisation) - self.texteComplexe += mcFils.texteElt - if mcFils.aCreer : self.texteSimple += mcFils.texteSimple - if mcFils.aCreer : texteComplexeVenantDesFils += mcFils.texteComplexe - return texteComplexeVenantDesFils - - 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() - if first : - if multiple : self.nomDuTypePyxb = self.definitNomDuTypePyxb(forceACreer=True) - else : self.nomDuTypePyxb = self.definitNomDuTypePyxb() - self.texteSimple = "" # on n ajoute pas de type simple - - self.traduitMinMax() - # pour accepter les PROC et ... - # - if self.aCreer : - self.texteComplexe = debutTypeCompo.format(self.nomDuTypePyxb) - if isinstance(self,X_OPER) or isinstance(self,X_PROC) : - self.texteComplexe += debutTypeCompoEtape.format(self.code) - self.texteComplexe += debutTypeCompoSeq - 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 - if isinstance(self,X_PROC) : self.texteComplexe += finTypeCompoEtape - if not isinstance(self,X_OPER ) : self.texteComplexe += finTypeCompo - else : - self.texteComplexe = "" - - self.texteElt=eltCompoDsSequence.format(self.nom,self.nomDuCodeDumpe,self.nomDuTypePyxb,self.minOccurs,self.maxOccurs) - #print (self.texteComplexe) - #print ('------------------------------------------------',self.nom) - - def traduitMinMax(self): - # ______________________ - # valable pour PROC et OPER - self.minOccurs = 0 - self.maxOccurs = 1 - - def compare(self,autreMC): - if self.label != autreMC.label : return False - if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True - for attr in ( 'regles', 'fr', 'defaut', 'min' ,'max', 'position' , 'docu' ) : - val1=getattr(self,attr) - val2=getattr(autreMC,attr) - if val1 != val2 : return False - if len(self.entites) != len(autreMC.entites) : return False - for defFille in self.entites.keys(): - if defFille not in autreMC.entites.keys() : return False - if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False - return True - - def prepareDumpXSD(self): - self.dejaPrepareDump=True - self.inUnion=False - self.tousLesFils=[] - self.mcXSD=[] - for nomMC in self.ordre_mc: - mc=self.entites[nomMC] - self.mcXSD.append(mc) - mc.prepareDumpXSD() - self.chercheListesDeBlocsNonDisjoints() - for l in list(self.listeDesBlocsNonDisjoints) : - if not(self.besoinDeFactoriserTrivial(l)) : self.listeDesBlocsNonDisjoints.remove(l) - else : self.factorise(l) - - def chercheListesDeBlocsNonDisjoints(self): - self.listeDesBlocsNonDisjoints=[] - for nomChild in self.ordre_mc : - child=self.entites[nomChild] - if child.label != 'BLOC' : continue - if self.listeDesBlocsNonDisjoints == [] : - self.listeDesBlocsNonDisjoints.append([child]) - continue - vraimentIndependant=True - for liste in list(self.listeDesBlocsNonDisjoints): - independant=True - for bloc in liste : - if bloc.isDisjoint(child) : continue - if bloc.estLeMemeQue(child) : continue - independant=False - vraimentIndependant=False - if not (independant) : - liste.append(child) - if vraimentIndependant: - self.listeDesBlocsNonDisjoints.append([child]) - # on nettoye la liste des blocs tous seuls - for l in list(self.listeDesBlocsNonDisjoints) : - if len(l) ==1 : self.listeDesBlocsNonDisjoints.remove(l) - - def estLeMemeQue(self,autreMC): - if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None: return True - return False - - def aUnPremierCommunDansLesPossibles(self, laListe) : - # fonctionne avec liste de mc ou une liste(mc,index) - import types - mesPremiers=set() - for elt,index in laListe : - if not type(e) == types.ListType : - if elt.nom in mesPremiers : return True - mesPremiers.add(elt.nom) - else : - if elt[0].nom in mesPremiers : return True - mesPremiers.add(elt[0].nom) - return False - - def besoinDeFactoriserTrivial(self,laListe): - besoin=False - lesPremiers=set() - for mcBloc in laListe : - mc=mcBloc.mcXSD[0] - if mc.label == 'BLOC' : return True - if not(mc.statut=='o') : return True - if mc.nom in lesPremiers : return True - lesPremiers.add(mc.nom) - return False - - def factorise(self,liste,debug=False): - self.listeConstruction=liste - nomDebut=liste[0].nom - indexDebut=self.mcXSD.index(liste[0]) - nomFin=liste[-1].nom - indexFin=self.mcXSD.index(liste[-1]) + 1 - nom=nomDebut+'_'+nomFin - if debug : print ('___________ dans factorise', nom) - listeAFactoriser=[] - for i in range(indexDebut, indexFin) : - listeAFactoriser.append(self.mcXSD[i]) - - newListe=self.mcXSD[0:indexDebut] - - monEltFacteur=X_compoFactoriseAmbigu(nom,listeAFactoriser,self) - newListe.append(monEltFacteur) - newListe=newListe+self.mcXSD[indexFin:] - self.mcXSD=newListe - if debug :print ('___________ fin fin factorise', nom) - - def construitTousLesFils(self): - for nomChild in self.ordre_mc : - if nomChild == 'Consigne' or nomChild == 'blocConsigne' : continue - child=self.entites[nomChild] - if child.label != 'BLOC' : - self.tousLesFils.append(child.nom) - else: - if child.tousLesFils == [] : child.construitTousLesFils() - for nomPetitFils in child.tousLesFils : self.tousLesFils.append(nomPetitFils) - #print ('construitArbreEntier pour ', self.nom, self.tousLesFils) - - - def isDisjoint(self, mc1) : - if self.tousLesFils == [] : self.construitTousLesFils() - if not (hasattr(mc1, 'tousLesFils')) : mc1.tousLesFils = [] - if mc1.tousLesFils == [] : mc1.construitTousLesFils() - for fils in mc1.tousLesFils : - if fils in self.tousLesFils : return False - return True + + def creeTexteComplexeVenantDesFils(self,dansFactorisation=False,debug=False): + texteComplexeVenantDesFils="" + blocsDejaDumpes=set() + #for nom in self.ordre_mc: + # mcFils = self.entites[nom] + if debug : print ('creeTexteComplexeVenantDesFils', self.nom) + for mcFils in self.mcXSD : + if not (isinstance(mcFils, Accas.BLOC)) : + mcFils.dumpXsd(dansFactorisation) + #print (mcFils.texteSimple) + self.texteComplexe += mcFils.texteElt + if mcFils.aCreer : self.texteSimple += mcFils.texteSimple + if mcFils.aCreer : texteComplexeVenantDesFils += mcFils.texteComplexe + else : + if hasattr(mcFils,'nomXML') and mcFils.nomXML in blocsDejaDumpes and mcFils.nomXML != None : continue + if hasattr(mcFils,'nomXML') and mcFils.nomXML != None: blocsDejaDumpes.add(mcFils.nomXML) + mcFils.dumpXsd(dansFactorisation) + self.texteComplexe += mcFils.texteElt + if mcFils.aCreer : self.texteSimple += mcFils.texteSimple + if mcFils.aCreer : texteComplexeVenantDesFils += mcFils.texteComplexe + return texteComplexeVenantDesFils + + 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() + if first : + if multiple : self.nomDuTypePyxb = self.definitNomDuTypePyxb(forceACreer=True) + else : self.nomDuTypePyxb = self.definitNomDuTypePyxb() + self.texteSimple = "" # on n ajoute pas de type simple + + self.traduitMinMax() + # pour accepter les PROC et ... + # + if self.aCreer : + self.texteComplexe = debutTypeCompo.format(self.nomDuTypePyxb) + if isinstance(self,X_OPER) or isinstance(self,X_PROC) : + self.texteComplexe += debutTypeCompoEtape.format(self.code) + self.texteComplexe += debutTypeCompoSeq + 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 + if isinstance(self,X_PROC) : self.texteComplexe += finTypeCompoEtape + if not isinstance(self,X_OPER ) : self.texteComplexe += finTypeCompo + else : + self.texteComplexe = "" + + self.texteElt=eltCompoDsSequence.format(self.nom,self.nomDuCodeDumpe,self.nomDuTypePyxb,self.minOccurs,self.maxOccurs) + #print (self.texteComplexe) + #print ('------------------------------------------------',self.nom) + + def traduitMinMax(self): + # ______________________ + # valable pour PROC et OPER + self.minOccurs = 0 + self.maxOccurs = 1 + + def compare(self,autreMC): + if self.label != autreMC.label : return False + if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True + for attr in ( 'regles', 'fr', 'defaut', 'min' ,'max', 'position' , 'docu' ) : + val1=getattr(self,attr) + val2=getattr(autreMC,attr) + if val1 != val2 : return False + if len(self.entites) != len(autreMC.entites) : return False + for defFille in self.entites.keys(): + if defFille not in autreMC.entites.keys() : return False + if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False + return True + + def prepareDumpXSD(self): + self.dejaPrepareDump=True + self.inUnion=False + self.tousLesFils=[] + self.mcXSD=[] + for nomMC in self.ordre_mc: + mc=self.entites[nomMC] + self.mcXSD.append(mc) + mc.prepareDumpXSD() + self.chercheListesDeBlocsNonDisjoints() + for l in list(self.listeDesBlocsNonDisjoints) : + if not(self.besoinDeFactoriserTrivial(l)) : self.listeDesBlocsNonDisjoints.remove(l) + else : self.factorise(l) + + def chercheListesDeBlocsNonDisjoints(self): + self.listeDesBlocsNonDisjoints=[] + for nomChild in self.ordre_mc : + child=self.entites[nomChild] + if child.label != 'BLOC' : continue + if self.listeDesBlocsNonDisjoints == [] : + self.listeDesBlocsNonDisjoints.append([child]) + continue + vraimentIndependant=True + for liste in list(self.listeDesBlocsNonDisjoints): + independant=True + for bloc in liste : + if bloc.isDisjoint(child) : continue + if bloc.estLeMemeQue(child) : continue + independant=False + vraimentIndependant=False + if not (independant) : + liste.append(child) + if vraimentIndependant: + self.listeDesBlocsNonDisjoints.append([child]) + # on nettoye la liste des blocs tous seuls + for l in list(self.listeDesBlocsNonDisjoints) : + if len(l) ==1 : self.listeDesBlocsNonDisjoints.remove(l) + + def estLeMemeQue(self,autreMC): + if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None: return True + return False + + def aUnPremierCommunDansLesPossibles(self, laListe) : + # fonctionne avec liste de mc ou une liste(mc,index) + import types + mesPremiers=set() + for elt,index in laListe : + if not type(e) == types.ListType : + if elt.nom in mesPremiers : return True + mesPremiers.add(elt.nom) + else : + if elt[0].nom in mesPremiers : return True + mesPremiers.add(elt[0].nom) + return False + + def besoinDeFactoriserTrivial(self,laListe): + besoin=False + lesPremiers=set() + for mcBloc in laListe : + mc=mcBloc.mcXSD[0] + if mc.label == 'BLOC' : return True + if not(mc.statut=='o') : return True + if mc.nom in lesPremiers : return True + lesPremiers.add(mc.nom) + return False + + def factorise(self,liste,debug=False): + self.listeConstruction=liste + nomDebut=liste[0].nom + indexDebut=self.mcXSD.index(liste[0]) + nomFin=liste[-1].nom + indexFin=self.mcXSD.index(liste[-1]) + 1 + nom=nomDebut+'_'+nomFin + if debug : print ('___________ dans factorise', nom) + listeAFactoriser=[] + for i in range(indexDebut, indexFin) : + listeAFactoriser.append(self.mcXSD[i]) + + newListe=self.mcXSD[0:indexDebut] + + monEltFacteur=X_compoFactoriseAmbigu(nom,listeAFactoriser,self) + newListe.append(monEltFacteur) + newListe=newListe+self.mcXSD[indexFin:] + self.mcXSD=newListe + if debug :print ('___________ fin fin factorise', nom) + + def construitTousLesFils(self): + for nomChild in self.ordre_mc : + if nomChild == 'Consigne' or nomChild == 'blocConsigne' : continue + child=self.entites[nomChild] + if child.label != 'BLOC' : + self.tousLesFils.append(child.nom) + else: + if child.tousLesFils == [] : child.construitTousLesFils() + for nomPetitFils in child.tousLesFils : self.tousLesFils.append(nomPetitFils) + #print ('construitArbreEntier pour ', self.nom, self.tousLesFils) + + + def isDisjoint(self, mc1) : + if self.tousLesFils == [] : self.construitTousLesFils() + if not (hasattr(mc1, 'tousLesFils')) : mc1.tousLesFils = [] + if mc1.tousLesFils == [] : mc1.construitTousLesFils() + for fils in mc1.tousLesFils : + if fils in self.tousLesFils : return False + return True @@ -656,42 +656,42 @@ class X_definitionComposee (X_definition): class X_FACT (X_definitionComposee): #--------- ------------------------ #Un FACT avec max=** doit se projeter en XSD sous forme d'une sequence a cardinalite 1 et -# l'element qui porte la repetition du FACT - def traduitMinMax(self): - if self.max == '**' or self.max == float('inf') : self.maxOccurs="unbounded" - else : self.maxOccurs = self.max - self.minOccurs = self.min - if self.statut =='f' : self.minOccurs=0 - - def construitArbrePossibles(self): - if self.statut == 'f' : - self.arbrePossibles = (self.nom,[]) - self.arbreMCPossibles = (self,None) - else : - self.arbrePossibles = (self.nom,) - self.arbreMCPossibles = (self,) - #print ('XFACT arbre des possibles de ' ,self.nom, self.arbrePossibles) +# l'element qui porte la repetition du FACT + def traduitMinMax(self): + if self.max == '**' or self.max == float('inf') : self.maxOccurs="unbounded" + else : self.maxOccurs = self.max + self.minOccurs = self.min + if self.statut =='f' : self.minOccurs=0 + + def construitArbrePossibles(self): + if self.statut == 'f' : + self.arbrePossibles = (self.nom,[]) + self.arbreMCPossibles = (self,None) + else : + self.arbrePossibles = (self.nom,) + self.arbreMCPossibles = (self,) + #print ('XFACT arbre des possibles de ' ,self.nom, self.arbrePossibles) # --------------------------------- class X_OPER (X_definitionComposee): # --------------------------------- - def dumpXsd(self, dansFactorisation=False, multiple = False, first=False): - X_definitionComposee.dumpXsd(self,dansFactorisation) - self.texteComplexe += finTypeCompoSeq - self.texteComplexe += attributeNameName - self.texteComplexe += attributeTypeForASSD - self.texteComplexe += attributeTypeUtilisateurName.format(self.sd_prod.__name__) - self.texteComplexe += finTypeCompoEtape - self.texteComplexe += finTypeCompo - - - cata = CONTEXT.getCurrentCata() - if self.sd_prod.__name__ not in list(cata.dictTypesASSDorUserASSDCrees) : - cata.dictTypesASSDorUserASSDCrees[self.sd_prod.__name__]=[self,] - else : - cata.dictTypesASSDorUserASSDCrees[self.sd_prod.__name__].append(self) + def dumpXsd(self, dansFactorisation=False, multiple = False, first=False): + X_definitionComposee.dumpXsd(self,dansFactorisation) + self.texteComplexe += finTypeCompoSeq + self.texteComplexe += attributeNameName + self.texteComplexe += attributeTypeForASSD + self.texteComplexe += attributeTypeUtilisateurName.format(self.sd_prod.__name__) + self.texteComplexe += finTypeCompoEtape + self.texteComplexe += finTypeCompo + + + cata = CONTEXT.getCurrentCata() + if self.sd_prod.__name__ not in list(cata.dictTypesASSDorUserASSDCrees) : + cata.dictTypesASSDorUserASSDCrees[self.sd_prod.__name__]=[self,] + else : + cata.dictTypesASSDorUserASSDCrees[self.sd_prod.__name__].append(self) # ---------------------------------- @@ -702,269 +702,269 @@ class X_PROC (X_definitionComposee): #----------------------------------- class X_BLOC (X_definitionComposee): #----------------------------------- - def dumpXsd(self, dansFactorisation=False, multiple = False, first=False, debug = False): - if debug : print ('X_BLOC dumpXsd', self.nom) - self.tousLesFils=[] - if self.nom == 'blocConsigne' : - self.texteComplexe = "" - self.texteSimple = "" - self.nomDuTypePyxb = "NonTraiteConsigne" - self.texteSimpleVenantDesFils = "" - self.aCreer = False - self.texteElt = "" - - return - self.getNomDuCodeDumpe() - # dans ce cas les blocs successifs sont identiques et on ne dumpe que le 1er - - self.nomDuTypePyxb = self.definitNomDuTypePyxb() - self.texteSimple = "" # on n ajoute pas de type simple - - # Pour les blocs le minOccurs vaut 0 et le max 1 - if self.aCreer : - self.texteComplexe = debutTypeSubst.format(self.nomDuTypePyxb) - texteComplexeVenantDesFils=self.creeTexteComplexeVenantDesFils(dansFactorisation) - self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe - self.texteComplexe += finTypeSubst - - else : - self.texteComplexe = "" - - self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1) - - #print ('------------------------------------------------') - - def compare(self,autreMC): - if self.label != autreMC.label : return False - if self.inUnion == True or autreMC.inUnion == True : return False - if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True - for attr in ( 'condition', 'regles', ): - val1=getattr(self,attr) - val2=getattr(autreMC,attr) - if val1 != val2 : return False - if len(self.entites) != len(autreMC.entites) : return False - for defFille in self.entites.keys(): - if defFille not in autreMC.entites.keys() : return False - if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False - return True - - def construitArbrePossibles(self): - self.arbrePossibles=[[],] - #print ('X_BLOC je construis l arbre des possibles pour ', self.nom) - for child in self.mcXSD : - if not hasattr(child, 'arbrePossibles') : child.construitArbrePossibles() - #print (child.nom, child.label, child.arbrePossibles) - if child.label == 'BLOC' : - self.arbrePossibles = deepcopy(self.remplaceListeParContenuEtVide(self.arbrePossibles, child.arbrePossibles)) - elif child.label == 'BlocAmbigu': - #print ("je passe par la pour", self.nom, child.nom, self.arbrePossibles, child.arbrePossibles) - self.arbrePossibles = deepcopy(self.remplaceListeParContenuEtVide(self.arbrePossibles, child.arbrePossibles)) - #print ('resultat', self.arbrePossibles) - else : - self.arbrePossibles = deepcopy(self.adjoint(self.arbrePossibles, child.arbrePossibles)) - self.arbrePossibles.append([]) # un bloc n est pas obligatoire - #print ('arbre des possibles de ' ,self.nom, self.arbrePossibles) + def dumpXsd(self, dansFactorisation=False, multiple = False, first=False, debug = False): + if debug : print ('X_BLOC dumpXsd', self.nom) + self.tousLesFils=[] + if self.nom == 'blocConsigne' : + self.texteComplexe = "" + self.texteSimple = "" + self.nomDuTypePyxb = "NonTraiteConsigne" + self.texteSimpleVenantDesFils = "" + self.aCreer = False + self.texteElt = "" + + return + self.getNomDuCodeDumpe() + # dans ce cas les blocs successifs sont identiques et on ne dumpe que le 1er + + self.nomDuTypePyxb = self.definitNomDuTypePyxb() + self.texteSimple = "" # on n ajoute pas de type simple + + # Pour les blocs le minOccurs vaut 0 et le max 1 + if self.aCreer : + self.texteComplexe = debutTypeSubst.format(self.nomDuTypePyxb) + texteComplexeVenantDesFils=self.creeTexteComplexeVenantDesFils(dansFactorisation) + self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe + self.texteComplexe += finTypeSubst + + else : + self.texteComplexe = "" + + self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1) + + #print ('------------------------------------------------') + + def compare(self,autreMC): + if self.label != autreMC.label : return False + if self.inUnion == True or autreMC.inUnion == True : return False + if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True + for attr in ( 'condition', 'regles', ): + val1=getattr(self,attr) + val2=getattr(autreMC,attr) + if val1 != val2 : return False + if len(self.entites) != len(autreMC.entites) : return False + for defFille in self.entites.keys(): + if defFille not in autreMC.entites.keys() : return False + if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False + return True + + def construitArbrePossibles(self): + self.arbrePossibles=[[],] + #print ('X_BLOC je construis l arbre des possibles pour ', self.nom) + for child in self.mcXSD : + if not hasattr(child, 'arbrePossibles') : child.construitArbrePossibles() + #print (child.nom, child.label, child.arbrePossibles) + if child.label == 'BLOC' : + self.arbrePossibles = deepcopy(self.remplaceListeParContenuEtVide(self.arbrePossibles, child.arbrePossibles)) + elif child.label == 'BlocAmbigu': + #print ("je passe par la pour", self.nom, child.nom, self.arbrePossibles, child.arbrePossibles) + self.arbrePossibles = deepcopy(self.remplaceListeParContenuEtVide(self.arbrePossibles, child.arbrePossibles)) + #print ('resultat', self.arbrePossibles) + else : + self.arbrePossibles = deepcopy(self.adjoint(self.arbrePossibles, child.arbrePossibles)) + self.arbrePossibles.append([]) # un bloc n est pas obligatoire + #print ('arbre des possibles de ' ,self.nom, self.arbrePossibles) #-------------------------------- class X_SIMP (X_definition): #-------------------------------- - def dumpXsd(self, dansFactorisation=False, multiple=False, first=False, debug=False): - #if PourTraduction : print (self.nom) - if debug : print ('X_SIMP dumpXsd pour', self.nom, '___________________________') - self.prepareDumpXSD() - # si inUnion la comparaison est fausse : on cree le nomDuType - if multiple : self.inUnion=True - #print ('exploreObjet SIMP') - self.getNomDuCodeDumpe() - self.aCreer = True - self.texteComplexe = "" - self.texteSimple = "" - self.texteElt = "" - if self.nom =='Consigne' : return - - # --> homonymie on peut utiliser genealogie ? - self.nomDuTypeDeBase = self.traduitType() - if debug : print ('nomDuTypeDeBase', self.nomDuTypeDeBase) - if debug : print ('multiple', multiple, 'first', first) - if not multiple : - self.nomDuTypePyxb = self.definitNomDuTypePyxb() - else : - if first : - # on force la creation - self.nomDuTypePyxb = self.definitNomDuTypePyxb() - self.aCreer = True - else : - self.nomDuTypePyxb='NonDetermine' - - if debug : print ('nomDuTypePyxb', self.nomDuTypePyxb) - if debug : print ('aCreer', self.aCreer) - # on se sert des listes ou non pour la gestion des minOccurs /maxOccurs est > 0 - if self.statut =='f' : minOccurs = 0 - else : minOccurs = 1 - if dansFactorisation : minOccurs = 1 - - #print ('minOccurs',minOccurs) - # le defaut est dans l elt Name -> tester la coherence d existence avec Accas - # regles Accas - - # pas d elt si on est dans multiple - # sauf si on est le '1er' dans un element ambigu - if not multiple : - #print ('je passe la pas multiple') - if self.defaut : - if self.max > 1 or self.max == '**' or self.max == float('inf') : - # a revoir pour les tuples avec defaut - txtDefaut="" - for val in self.defaut : txtDefaut+=str(val) +" " - self.texteElt = eltWithDefautDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut) - else : - if str(self.defaut) == 'True' : txtDefaut = 'true' - elif str(self.defaut) == 'False' : txtDefaut = 'false' - else : txtDefaut = str(self.defaut) - self.texteElt = eltWithDefautDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut) - else : self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1) - elif first: - self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,1,1) - - # self.aCreer est mis a jour ds definitNomDuTypePyxb - # ou si elt est le 1er d une liste identique - if debug : print ('je suis aCreer', self.aCreer) - if not self.aCreer : return - - typeATraduire=self.type[0] - - self.texteSimplePart1="" - if not(isinstance(typeATraduire,str)) and not(isinstance(typeATraduire,Accas.Tuple)) and issubclass(typeATraduire, Accas.UserASSD) : - self.isAtypeUserASSD = True - cata = CONTEXT.getCurrentCata() - if len(self.type) == 2 and self.type[1]=='createObject' : suffixe = 'C' - else : suffixe = 'U' - if typeATraduire.__name__+'_'+suffixe not in cata.listeUserASSDDumpes : - self.texteSimplePart1 = defUserAssd.format(typeATraduire.__name__, suffixe) - cata.listeUserASSDDumpes.add(typeATraduire.__name__+'_'+suffixe) - - if cata.definitUserASSD ==False : - cata.definitUserASSD = True - cata.texteSimple = cata.texteSimple + defBaseXSDUserAssd - - - if not multiple : self.texteSimple += debutSimpleType.format(self.nomDuTypePyxb) - else : self.texteSimple += debutSimpleTypeSsNom - # On est dans une liste - if self.max > 1 or self.max == '**' or self.max == float('inf') or hasattr(self.type[0], 'ntuple') : - self.texteSimple += debutTypeSimpleListe - self.texteSimple += "\t\t\t\t"+debutRestrictionBase.format(self.nomDuTypeDeBase) - 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: - # PN --> traduction des into - 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 += fermeRestrictionBase - else : - # ou pas - self.texteSimple += debutRestrictionBase.format(self.nomDuTypeDeBase) - if self.val_min != float('-inf') : self.texteSimple += minInclusiveBorne.format(self.val_min) - if self.val_max != float('inf') and self.val_max != '**' : self.texteSimple += 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 += enumeration.format(val) - if PourTraduction : - for val in into : print (str(val)) - self.texteSimple += fermeRestrictionBase - self.texteSimple += fermeSimpleType - self.texteSimplePart2 = self.texteSimple - self.texteSimple = self.texteSimplePart1 + self.texteSimplePart2 - - - def prepareDumpXSD(self): - self.inUnion=False - if self.statut == 'f' : self.arbrePossibles = (self.nom,[]) - else : self.arbrePossibles = (self.nom,) - self.mcXSD=[] - - - - def traduitType(self): - # il faut traduire le min et le max - # il faut ajouter les regles - # il faut gerer les types tuple et fichier - 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') - else : - typeATraduire=self.type[0] - if not (typeATraduire in list(dictNomsDesTypes.keys())) : - #if (isinstance(typeATraduire, Accas.ASSD) or issubclass(typeATraduire, Accas.ASSD)) : - if (not(isinstance(typeATraduire,str)) and issubclass(typeATraduire, Accas.ASSD)) : - # cas d une creation - cata = CONTEXT.getCurrentCata() - # PNPNPN a Revoir pour la creation des keyrefs - if len(self.type) == 2 and self.type[1]=='createObject' : - if typeATraduire.__name__ not in list(cata.dictTypesASSDorUserASSDCrees) : - cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__]=[self,] + def dumpXsd(self, dansFactorisation=False, multiple=False, first=False, debug=False): + #if PourTraduction : print (self.nom) + if debug : print ('X_SIMP dumpXsd pour', self.nom, '___________________________') + self.prepareDumpXSD() + # si inUnion la comparaison est fausse : on cree le nomDuType + if multiple : self.inUnion=True + #print ('exploreObjet SIMP') + self.getNomDuCodeDumpe() + self.aCreer = True + self.texteComplexe = "" + self.texteSimple = "" + self.texteElt = "" + if self.nom =='Consigne' : return + + # --> homonymie on peut utiliser genealogie ? + self.nomDuTypeDeBase = self.traduitType() + if debug : print ('nomDuTypeDeBase', self.nomDuTypeDeBase) + if debug : print ('multiple', multiple, 'first', first) + if not multiple : + self.nomDuTypePyxb = self.definitNomDuTypePyxb() + else : + if first : + # on force la creation + self.nomDuTypePyxb = self.definitNomDuTypePyxb() + self.aCreer = True + else : + self.nomDuTypePyxb='NonDetermine' + + if debug : print ('nomDuTypePyxb', self.nomDuTypePyxb) + if debug : print ('aCreer', self.aCreer) + # on se sert des listes ou non pour la gestion des minOccurs /maxOccurs est > 0 + if self.statut =='f' : minOccurs = 0 + else : minOccurs = 1 + if dansFactorisation : minOccurs = 1 + + #print ('minOccurs',minOccurs) + # le defaut est dans l elt Name -> tester la coherence d existence avec Accas + # regles Accas + + # pas d elt si on est dans multiple + # sauf si on est le '1er' dans un element ambigu + if not multiple : + #print ('je passe la pas multiple') + if self.defaut : + if self.max > 1 or self.max == '**' or self.max == float('inf') : + # a revoir pour les tuples avec defaut + txtDefaut="" + for val in self.defaut : txtDefaut+=str(val) +" " + self.texteElt = eltWithDefautDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut) else : - cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__].append(self) - if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_C' + if str(self.defaut) == 'True' : txtDefaut = 'true' + elif str(self.defaut) == 'False' : txtDefaut = 'false' + else : txtDefaut = str(self.defaut) + self.texteElt = eltWithDefautDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut) + else : self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1) + elif first: + self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,1,1) + + # self.aCreer est mis a jour ds definitNomDuTypePyxb + # ou si elt est le 1er d une liste identique + if debug : print ('je suis aCreer', self.aCreer) + if not self.aCreer : return + + typeATraduire=self.type[0] + + self.texteSimplePart1="" + if not(isinstance(typeATraduire,str)) and not(isinstance(typeATraduire,Accas.Tuple)) and issubclass(typeATraduire, Accas.UserASSD) : + self.isAtypeUserASSD = True + cata = CONTEXT.getCurrentCata() + if len(self.type) == 2 and self.type[1]=='createObject' : suffixe = 'C' + else : suffixe = 'U' + if typeATraduire.__name__+'_'+suffixe not in cata.listeUserASSDDumpes : + self.texteSimplePart1 = defUserAssd.format(typeATraduire.__name__, suffixe) + cata.listeUserASSDDumpes.add(typeATraduire.__name__+'_'+suffixe) + + if cata.definitUserASSD ==False : + cata.definitUserASSD = True + cata.texteSimple = cata.texteSimple + defBaseXSDUserAssd + + + if not multiple : self.texteSimple += debutSimpleType.format(self.nomDuTypePyxb) + else : self.texteSimple += debutSimpleTypeSsNom + # On est dans une liste + if self.max > 1 or self.max == '**' or self.max == float('inf') or hasattr(self.type[0], 'ntuple') : + self.texteSimple += debutTypeSimpleListe + self.texteSimple += "\t\t\t\t"+debutRestrictionBase.format(self.nomDuTypeDeBase) + 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: + # PN --> traduction des into + 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 += fermeRestrictionBase + else : + # ou pas + self.texteSimple += debutRestrictionBase.format(self.nomDuTypeDeBase) + if self.val_min != float('-inf') : self.texteSimple += minInclusiveBorne.format(self.val_min) + if self.val_max != float('inf') and self.val_max != '**' : self.texteSimple += 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 += enumeration.format(val) + if PourTraduction : + for val in into : print (str(val)) + self.texteSimple += fermeRestrictionBase + self.texteSimple += fermeSimpleType + self.texteSimplePart2 = self.texteSimple + self.texteSimple = self.texteSimplePart1 + self.texteSimplePart2 + + + def prepareDumpXSD(self): + self.inUnion=False + if self.statut == 'f' : self.arbrePossibles = (self.nom,[]) + else : self.arbrePossibles = (self.nom,) + self.mcXSD=[] + + + + def traduitType(self): + # il faut traduire le min et le max + # il faut ajouter les regles + # il faut gerer les types tuple et fichier + 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') + else : + typeATraduire=self.type[0] + if not (typeATraduire in list(dictNomsDesTypes.keys())) : + #if (isinstance(typeATraduire, Accas.ASSD) or issubclass(typeATraduire, Accas.ASSD)) : + if (not(isinstance(typeATraduire,str)) and issubclass(typeATraduire, Accas.ASSD)) : + # cas d une creation + cata = CONTEXT.getCurrentCata() + # PNPNPN a Revoir pour la creation des keyrefs + if len(self.type) == 2 and self.type[1]=='createObject' : + if typeATraduire.__name__ not in list(cata.dictTypesASSDorUserASSDCrees) : + cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__]=[self,] + else : + cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__].append(self) + if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_C' + else : return 'xs:string' + + # cas d une consommation + if typeATraduire not in list(cata.dictTypesASSDorUserASSDUtilises) : + cata.dictTypesASSDorUserASSDUtilises[typeATraduire]=[self,] + else : + cata.dictTypesASSDorUserASSDUtilises[typeATraduire].append(self,) + if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_U' else : return 'xs:string' - - # cas d une consommation - if typeATraduire not in list(cata.dictTypesASSDorUserASSDUtilises) : - cata.dictTypesASSDorUserASSDUtilises[typeATraduire]=[self,] - else : - cata.dictTypesASSDorUserASSDUtilises[typeATraduire].append(self,) - if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_U' - else : return 'xs:string' - else : return ('YYYYY') - return dictNomsDesTypes[typeATraduire] - - def traduitValMinValMax(self): - self.maxInclusive=self.val_max - self.minInclusive=self.val_min - if self.val_min == float('-inf') and val_max== float('inf') : return - #print ('il faut affiner le type du SIMP ', self.nom) - if self.val_max == '**' or self.val_max == float('inf') : self.maxInclusive=None - else : self.maxInclusive = self.val_max - if self.val_min == '**' or self.val_max == float('-inf') : self.maxInclusive=None - else : self.minInclusive = self.val_min - - def traduitMinMax(self): - if self.min == 1 and self.max == 1 : return - #print ('il faut creer une liste ' , self.nom) - - def compare(self,autreMC): - if self.label != autreMC.label : return False - if self.inUnion == True or autreMC.inUnion == True : return False - if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True - listeAComparer = [ 'type', 'defaut', 'min' ,'max' ,'val_min' , 'val_max' ] - if self.intoXML != None : listeAComparer.append('intoXML') - else : listeAComparer.append('into') - if (hasattr (self, 'nomXML')) and self.nomXML != None : nomUtil=self.nomXML - for attr in listeAComparer : - val1=getattr(self,attr) - val2=getattr(autreMC,attr) - if val1 != val2 : return False - return True - - def construitArbrePossibles(self): - if self.statut == 'f' : - self.arbrePossibles = (self.nom,[]) - else : - self.arbrePossibles = (self.nom,) - #print ('SIMP arbre des possibles de ' ,self.nom, self.arbrePossibles) + else : return ('YYYYY') + return dictNomsDesTypes[typeATraduire] + + def traduitValMinValMax(self): + self.maxInclusive=self.val_max + self.minInclusive=self.val_min + if self.val_min == float('-inf') and val_max== float('inf') : return + #print ('il faut affiner le type du SIMP ', self.nom) + if self.val_max == '**' or self.val_max == float('inf') : self.maxInclusive=None + else : self.maxInclusive = self.val_max + if self.val_min == '**' or self.val_max == float('-inf') : self.maxInclusive=None + else : self.minInclusive = self.val_min + + def traduitMinMax(self): + if self.min == 1 and self.max == 1 : return + #print ('il faut creer une liste ' , self.nom) + + def compare(self,autreMC): + if self.label != autreMC.label : return False + if self.inUnion == True or autreMC.inUnion == True : return False + if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True + listeAComparer = [ 'type', 'defaut', 'min' ,'max' ,'val_min' , 'val_max' ] + if self.intoXML != None : listeAComparer.append('intoXML') + else : listeAComparer.append('into') + if (hasattr (self, 'nomXML')) and self.nomXML != None : nomUtil=self.nomXML + for attr in listeAComparer : + val1=getattr(self,attr) + val2=getattr(autreMC,attr) + if val1 != val2 : return False + return True + + def construitArbrePossibles(self): + if self.statut == 'f' : + self.arbrePossibles = (self.nom,[]) + else : + self.arbrePossibles = (self.nom,) + #print ('SIMP arbre des possibles de ' ,self.nom, self.arbrePossibles) #----------------- @@ -972,7 +972,7 @@ class X_JDC_CATA : #----------------- def dumpXsd(self, avecEltAbstrait, debug = True): - cata = CONTEXT.getCurrentCata() + cata = CONTEXT.getCurrentCata() if debug : print ('avecEltAbstrait -------------------', avecEltAbstrait) if debug : print ('self.importedBy -------------------', self.importedBy) @@ -980,19 +980,19 @@ class X_JDC_CATA : self.texteSimple = "" self.texteComplexe = "" - self.texteCata = "" + self.texteCata = "" self.texteDeclaration = "" self.texteInclusion = "" self.texteElt = "" self.texteTypeAbstrait = "" if self.implement == "" : - self.nomDuCodeDumpe = self.code - self.implement = self.code - self.nomDuXsdPere = self.code + self.nomDuCodeDumpe = self.code + self.implement = self.code + self.nomDuXsdPere = self.code else : - self.implement,self.nomDuXsdPere=self.implement.split(':') - self.nomDuCodeDumpe = self.implement + self.implement,self.nomDuXsdPere=self.implement.split(':') + self.nomDuCodeDumpe = self.implement if debug : print ('self.implement -------------------', self.implement) if debug : print ('self.nomDuCodeDumpe -------------------', self.nomDuCodeDumpe) @@ -1002,12 +1002,12 @@ class X_JDC_CATA : self.dumpLesCommandes() if self.implement == self.code : - self.texteCata += eltAbstraitCataPPal.format(self.code) - self.texteCata += eltCataPPal.format(self.code,self.code,self.code) + self.texteCata += eltAbstraitCataPPal.format(self.code) + self.texteCata += eltCataPPal.format(self.code,self.code,self.code) else : - self.texteCata += eltAbstraitCataFils.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere) - self.texteCata += eltCataFils.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere,self.nomDuXsdPere) - self.texteInclusion += includeCata.format(self.nomDuXsdPere) + self.texteCata += eltAbstraitCataFils.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere) + self.texteCata += eltCataFils.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere,self.nomDuXsdPere) + self.texteInclusion += includeCata.format(self.nomDuXsdPere) self.texteCata += eltCata.format(self.implement,self.implement,self.implement,self.implement,self.nomDuXsdPere) #if self.implement == self.code : @@ -1019,7 +1019,7 @@ class X_JDC_CATA : - #for codeHeritant in self.importedBy: + #for codeHeritant in self.importedBy: # self.texteCata += eltCodeSpecDsCata.format(codeHeritant) # self.texteTypeAbstrait += eltAbstrait.format(codeHeritant,codeHeritant,self.code,codeHeritant) @@ -1032,11 +1032,11 @@ class X_JDC_CATA : # self.texteElt = eltCata.format(self.nomDuCodeDumpe,self.code, self.nomDuTypePyxb) if self.implement == self.code : - self.texteXSD = texteDebut.format(self.code,self.code,self.code,self.code,self.code,self.code) + self.texteXSD = texteDebut.format(self.code,self.code,self.code,self.code,self.code,self.code) elif self.nomDuXsdPere == self.code : - self.texteXSD = texteDebutNiveau2.format(self.code,self.implement,self.code,self.code,self.code, self.code,self.code,self.code,self.code,self.code) - else : - self.texteXSD = texteDebutNiveau3.format(self.code,self.implement,self.code,self.nomDuXsdPere,self.code,self.code,self.code, self.code,self.code,self.code,self.code,self.code) + self.texteXSD = texteDebutNiveau2.format(self.code,self.implement,self.code,self.code,self.code, self.code,self.code,self.code,self.code,self.code) + else : + self.texteXSD = texteDebutNiveau3.format(self.code,self.implement,self.code,self.nomDuXsdPere,self.code,self.code,self.code, self.code,self.code,self.code,self.code,self.code) if self.texteInclusion != "" : self.texteXSD += self.texteInclusion self.texteXSD += self.texteSimple @@ -1045,51 +1045,51 @@ class X_JDC_CATA : #if self.texteTypeAbstrait != "" : self.texteXSD += self.texteTypeAbstrait self.texteXSD += self.texteCata #self.texteXSD += self.texteElt - + toutesLesKeys=set() texteKeyRef = "" - # Pour le nom des key_ref en creation : le type ( une seule key-ref par type. facile a retrouver) + # Pour le nom des key_ref en creation : le type ( une seule key-ref par type. facile a retrouver) for clef in self.dictTypesASSDorUserASSDCrees: existeASSD=0 texteDesFields="" - for unOper in self.dictTypesASSDorUserASSDCrees[clef]: + for unOper in self.dictTypesASSDorUserASSDCrees[clef]: if not(isinstance(unOper, Accas.OPER)) : continue existeASSD=1 texteDesFields+=texteFieldUnitaire.format(self.code, unOper.nom) if existeASSD : texteDesFields=texteDesFields[0:-2] texteDesUserASSD='' existeunUserASSD=0 - for unSimp in self.dictTypesASSDorUserASSDCrees[clef]: + for unSimp in self.dictTypesASSDorUserASSDCrees[clef]: if not (isinstance(unSimp, Accas.SIMP)) : continue texteDesUserASSD += unSimp.getXPathSansSelf() + " | " #print (unSimp.getXPathSansSelf()) #texteFieldUnitaire='/'+self.code+":"+unSimp.nom existeunUserASSD=1 if existeunUserASSD: - if existeASSD : texteDesFields = texteDesFields + texteDesUserASSD[0:-2] +"/>\n\t\t" - else: texteDesFields = texteDesUserASSD[0:-2] + if existeASSD : texteDesFields = texteDesFields + texteDesUserASSD[0:-2] +"/>\n\t\t" + else: texteDesFields = texteDesUserASSD[0:-2] #print (texteDesUserASSD) #print (texteDesFields) if texteDesFields != "" : - texteKeyRef += producingASSDkeyRefDeclaration.format( clef ,texteDesFields) + texteKeyRef += producingASSDkeyRefDeclaration.format( clef ,texteDesFields) - # Pour le nom des key-ref en utilisation : la genealogie complete ( une key-ref par utilisation et on retrouve facilement la ) + # Pour le nom des key-ref en utilisation : la genealogie complete ( une key-ref par utilisation et on retrouve facilement la ) for clef in self.dictTypesASSDorUserASSDUtilises: - for unSimp in self.dictTypesASSDorUserASSDUtilises[clef]: - # il faut la genealogie - texteKeyRef += UsingASSDkeyRefDeclaration.format(unSimp.getNomCompletAvecBloc(), unSimp.type[0].__name__,self.code, unSimp.type[0].__name__,unSimp.getXPathComplet() ) + for unSimp in self.dictTypesASSDorUserASSDUtilises[clef]: + # il faut la genealogie + texteKeyRef += UsingASSDkeyRefDeclaration.format(unSimp.getNomCompletAvecBloc(), unSimp.type[0].__name__,self.code, unSimp.type[0].__name__,unSimp.getXPathComplet() ) #PNPN on debranche les keyref le temps de bien reflechir a leur forme - #if texteKeyRef != '' : + #if texteKeyRef != '' : # self.texteXSD = self.texteXSD[0:-3]+'>\n' # self.texteXSD += texteKeyRef - # self.texteXSD += fermeEltCata + # self.texteXSD += fermeEltCata #if not PourTraduction : print (self.texteXSD) - + import pprint #pprint.pprint (cata.dictTypesXSDJumeaux) #for k in cata.dictTypesXSDJumeaux: @@ -1103,31 +1103,31 @@ class X_JDC_CATA : dico = {} for k in list(cata.dictTypesXSD.keys()): - dico[k]={} - different=False - for definition in cata.dictTypesXSD[k] : - if definition.label == 'BLOC' or definition.label == 'BlocAmbigu':continue - if definition.nomDuTypePyxb != 'T_'+definition.nom : different=True - listeATraiter=[definition.geneaCompleteSousFormeDeListe(),] - while listeATraiter != [] : - listeGenea=listeATraiter[0] - listeATraiter=listeATraiter[1:] - txtNomComplet='' - indexMC=0 - for MC in listeGenea: - txtNomComplet=txtNomComplet+'_'+MC.nom - if MC in list(cata.dictTypesXSDJumeaux.keys()) : + dico[k]={} + different=False + for definition in cata.dictTypesXSD[k] : + if definition.label == 'BLOC' or definition.label == 'BlocAmbigu':continue + if definition.nomDuTypePyxb != 'T_'+definition.nom : different=True + listeATraiter=[definition.geneaCompleteSousFormeDeListe(),] + while listeATraiter != [] : + listeGenea=listeATraiter[0] + listeATraiter=listeATraiter[1:] + txtNomComplet='' + indexMC=0 + for MC in listeGenea: + txtNomComplet=txtNomComplet+'_'+MC.nom + if MC in list(cata.dictTypesXSDJumeaux.keys()) : 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 - dico[k][txtNomComplet]=definition.nomDuTypePyxb - if dico[k]== {} or (not different) : del dico[k] + indexMC=indexMC+1 + dico[k][txtNomComplet]=definition.nomDuTypePyxb + if dico[k]== {} or (not different) : del dico[k] import pprint #pprint.pprint(dico) if dico != {} : self.texteXSD += texteAnnotation.format(self.nomDuCodeDumpe,str(dico)) - + #import pprint #if (not PourTraduction) and (dico != {}) : pprint.pprint(dico) print ('__________________________ decommenter pour le texteXSD________________________') @@ -1136,51 +1136,51 @@ class X_JDC_CATA : self.texteXSD += texteFin return self.texteXSD - + def dumpLesCommandes(self): - cata = CONTEXT.getCurrentCata() + cata = CONTEXT.getCurrentCata() fichierCataSourceExt=os.path.basename(cata.cata.__file__) fichierCataSource, extension=os.path.splitext(fichierCataSourceExt) importCataSource=__import__(fichierCataSource,{},{}) texte="" for m in sys.modules: - monModule=sys.modules[m] - try : - if m in ('os', 'sys', 'inspect', 'six', 'pickle', 'codecs') : continue - if m in ('cPickle', 'pprint', 'dis', '_sre', 'encodings.aliases'): continue - if m in ('numbers', 'optparse', 'binascii', 'posixpath') : continue - if m in ('_locale', '_sysconfigdata_nd', 'gc', 'functools') : continue - if m in ('posixpath', 'types', 'posix', 'prefs') : continue - if m in ('warnings', 'types', 'posix', 'prefs') : continue - if monModule.__name__[0:15] == '_sysconfigdata_' : continue - if monModule.__name__ == '__future__' : continue - if monModule.__name__[0:3] == 'Ihm' : continue - if monModule.__name__[0:5] == 'numpy' : continue - if monModule.__name__[0:5] == 'Noyau' : continue - if monModule.__name__[0:5] == 'Accas' : continue - if monModule.__name__[0:7] == 'convert' : continue - if monModule.__name__[0:7] == 'Efi2Xsd' : continue - if monModule.__name__[0:7] == 'Editeur' : continue - if monModule.__name__[0:9] == 'generator' : continue - if monModule.__name__[0:10] == 'Validation' : continue - if monModule.__name__[0:10] == 'Extensions' : continue - if monModule.__name__[0:12] == 'InterfaceQT4' : continue - if monModule.__name__ == fichierCataSource : continue - texte= texte + "try : import "+ monModule.__name__ + " \n" - texte= texte + "except : pass \n" - texte= texte + "try : from "+ monModule.__name__ + ' import * \n' - texte= texte + "except : pass \n" - except : - pass + monModule=sys.modules[m] + try : + if m in ('os', 'sys', 'inspect', 'six', 'pickle', 'codecs') : continue + if m in ('cPickle', 'pprint', 'dis', '_sre', 'encodings.aliases'): continue + if m in ('numbers', 'optparse', 'binascii', 'posixpath') : continue + if m in ('_locale', '_sysconfigdata_nd', 'gc', 'functools') : continue + if m in ('posixpath', 'types', 'posix', 'prefs') : continue + if m in ('warnings', 'types', 'posix', 'prefs') : continue + if monModule.__name__[0:15] == '_sysconfigdata_' : continue + if monModule.__name__ == '__future__' : continue + if monModule.__name__[0:3] == 'Ihm' : continue + if monModule.__name__[0:5] == 'numpy' : continue + if monModule.__name__[0:5] == 'Noyau' : continue + if monModule.__name__[0:5] == 'Accas' : continue + if monModule.__name__[0:7] == 'convert' : continue + if monModule.__name__[0:7] == 'Efi2Xsd' : continue + if monModule.__name__[0:7] == 'Editeur' : continue + if monModule.__name__[0:9] == 'generator' : continue + if monModule.__name__[0:10] == 'Validation' : continue + if monModule.__name__[0:10] == 'Extensions' : continue + if monModule.__name__[0:12] == 'InterfaceQT4' : continue + if monModule.__name__ == fichierCataSource : continue + texte= texte + "try : import "+ monModule.__name__ + " \n" + texte= texte + "except : pass \n" + texte= texte + "try : from "+ monModule.__name__ + ' import * \n' + texte= texte + "except : pass \n" + except : + pass newModule=imp.new_module('__main__') exec (texte, newModule.__dict__) allClassToDump=[] for i in dir(importCataSource): - if i not in dir(newModule): + if i not in dir(newModule): allClassToDump.append(importCataSource.__dict__[i]) - + self.texteSimple = '' self.texteComplexe = '' @@ -1189,7 +1189,7 @@ class X_JDC_CATA : c.nomDuCodeDumpe=self.nomDuCodeDumpe c.code=self.implement c.dumpXsd() - + self.texteSimple += c.texteSimple self.texteComplexe += c.texteComplexe #c.texteElt=eltCompoDsSequenceInExtension.format(c.nom,self.code,c.nomDuTypePyxb) diff --git a/Efi2Xsd/MCAccasXML.py b/Efi2Xsd/MCAccasXML.py index 68f7339a..820e763f 100755 --- a/Efi2Xsd/MCAccasXML.py +++ b/Efi2Xsd/MCAccasXML.py @@ -4,18 +4,18 @@ import sys,os import inspect import traceback def trace(): - traceback.print_stack() + traceback.print_stack() #import raw.efficas as efficas import types sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..'))) try : - import pyxb - import pyxb.binding - import pyxb.binding.basis - #import pyxb.utils.utility - #import pyxb.utils.domutils + import pyxb + import pyxb.binding + import pyxb.binding.basis + #import pyxb.utils.utility + #import pyxb.utils.domutils except : pass from Accas import A_ASSD @@ -23,553 +23,546 @@ from Accas import A_ASSD class X_OBJECT: # ------------- - def delObjPyxb(self, debug=True): - if not self.cata or not self.cata.modeleMetier : return - if self.nom == 'Consigne' : return None - trouve = False - - if debug : print ('--------------- in delObjPyxb pour ' , self.nom) - if debug : print (self.perePyxb.objPyxb.orderedContent()) - if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent()))) - - elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom)) - if debug : print ('element moi = ', elt, 'id de moi = ', id(self.objPyxb), self.objPyxb) - if (elt.elementDeclaration.isPlural()): - if debug : print ('je suis Plural') - # monIndexInOrderedContent=0 - # for c in self.perePyxb.objPyxb.orderedContent(): - # if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(self.objPyxb)): monIndexInOrderedContent += 1 - # listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui') - # if len(listeObjetsAccas) == 1 : monIndex=0 - # else : monIndex=listeObjetsAccas.index(self) - # listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key) - # listeObjetsPyxb.pop(monIndex) - # self.perePyxb.objPyxb.orderedContent().pop(monIndexInOrderedContent) - for c in self.perePyxb.objPyxb.orderedContent(): - trouve=False - if isinstance(c._Content__value,list) and isinstance(c._Content__value[0],type(self.objPyxb)): - monIndex=c.value.index(self.objPyxb) - trouve = True - if trouve : break - if not trouve : print ("************ pas trouve au delete"); return - listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key) - listeObjetsPyxb.pop(monIndex) - # si dernier ? - else : - newOrderedContent = [] - for i in self.perePyxb.objPyxb.orderedContent(): - if id(self.objPyxb) == id(i._Content__value) : trouve = True ;continue - newOrderedContent.append(i) - if not trouve : print ('elt a supprimer ', self.nom, 'non trouve') - for i in range(len(newOrderedContent)): - self.perePyxb.objPyxb.orderedContent()[i]=newOrderedContent[i] - self.perePyxb.objPyxb.orderedContent().pop(len(newOrderedContent)) - - setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,None) + def delObjPyxb(self, debug=False): + if not self.cata or not self.cata.modeleMetier : return + if self.nom == 'Consigne' : return None + trouve = False + + if debug : print ('--------------- in delObjPyxb pour ' , self.nom) + if debug : print (self.perePyxb.objPyxb.orderedContent()) + if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent()))) + + elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom)) + if debug : print ('element moi = ', elt, 'id de moi = ', id(self.objPyxb), self.objPyxb) + if (elt.elementDeclaration.isPlural()): + if debug : print ('je suis Plural') + # monIndexInOrderedContent=0 + # for c in self.perePyxb.objPyxb.orderedContent(): + # if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(self.objPyxb)): monIndexInOrderedContent += 1 + # listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui') + # if len(listeObjetsAccas) == 1 : monIndex=0 + # else : monIndex=listeObjetsAccas.index(self) + # listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key) + # listeObjetsPyxb.pop(monIndex) + # self.perePyxb.objPyxb.orderedContent().pop(monIndexInOrderedContent) + for c in self.perePyxb.objPyxb.orderedContent(): + trouve=False + if isinstance(c._Content__value,list) and isinstance(c._Content__value[0],type(self.objPyxb)): + monIndex=c.value.index(self.objPyxb) + trouve = True + if trouve : break + if not trouve : print ("************ pas trouve au delete"); return + listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key) + listeObjetsPyxb.pop(monIndex) + # si dernier ? + else : + newOrderedContent = [] + for i in self.perePyxb.objPyxb.orderedContent(): + if id(self.objPyxb) == id(i._Content__value) : trouve = True ;continue + newOrderedContent.append(i) + if not trouve : print ('elt a supprimer ', self.nom, 'non trouve') + for i in range(len(newOrderedContent)): + self.perePyxb.objPyxb.orderedContent()[i]=newOrderedContent[i] + self.perePyxb.objPyxb.orderedContent().pop(len(newOrderedContent)) + + setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,None) + if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent()))) + + + + def addObjPyxb(self,indiceDsLeContenu,debug=False): + if not self.cata or not self.cata.modeleMetier : return + if debug :print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu) + # adherence Accas sur le parent + parent=self.parent + while (parent.isBLOC()): + if parent != self.parent : indiceDsLeContenu += parent.rangDsPyxb() + parent=parent.parent + self.perePyxb=parent + + if debug :print ('indiceDsLeContenu',indiceDsLeContenu) + if debug :print (pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom)) + + #if self.objPyxb ! = None : self.objPyxb.objAccas=self + elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom)) + self.perePyxb.objPyxb.orderedContent().insert(indiceDsLeContenu,elt) + if (elt.elementDeclaration.isPlural()): + # je suis donc un MCList + listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui') + if len(listeObjetsAccas) == 1 : monIndex=1 + else : monIndex=listeObjetsAccas.index(self) + listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key) + listeObjetsPyxb.insert(monIndex,self.objPyxb) + else : + setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb) if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent()))) + if debug : print ('fin _____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu) + + + def rangDsPyxb(self): + monRangEnAccas=self.parent.mcListe.index(self) + rangEnPyxb=0 + for frere in self.parent.mcListe[0: monRangEnAccas] : + rangEnPyxb += frere.longueurDsArbre() + return rangEnPyxb - - - def addObjPyxb(self,indiceDsLeContenu,debug=False): - if not self.cata or not self.cata.modeleMetier : return - if debug :print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu) - # adherence Accas sur le parent - parent=self.parent - while (parent.isBLOC()): - if parent != self.parent : indiceDsLeContenu += parent.rangDsPyxb() - parent=parent.parent - self.perePyxb=parent - - if debug :print ('indiceDsLeConten',indiceDsLeContenu) - if debug :print (pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom)) - - #if self.objPyxb ! = None : self.objPyxb.objAccas=self - elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom)) - self.perePyxb.objPyxb.orderedContent().insert(indiceDsLeContenu,elt) - if (elt.elementDeclaration.isPlural()): - # je suis donc un MCList - listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui') - if len(listeObjetsAccas) == 1 : monIndex=1 - else : monIndex=listeObjetsAccas.index(self) - listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key) - listeObjetsPyxb.insert(monIndex,self.objPyxb) - else : - setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb) - if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent()))) - print ('fin _____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu) - - - def rangDsPyxb(self): - monRangEnAccas=self.parent.mcListe.index(self) - rangEnPyxb=0 - for frere in self.parent.mcListe[0: monRangEnAccas] : - rangEnPyxb += frere.longueurDsArbre() - return rangEnPyxb - class X_MCSIMP(X_OBJECT): # ----------------------- - - def buildObjPyxb(self, debug=False) : - if not self.cata or not self.cata.modeleMetier : return - if self.nom == 'Consigne' : return None - if debug : print (self.definition.nomComplet()) - if debug : print ('_______________ X_MCSIMP buildObjPyxb', self.nom, self,self.valeur) - if debug and self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb') - elif debug : print ('objPyxbDeConstruction', self.objPyxbDeConstruction) - - if self.objPyxbDeConstruction != None : - self.objPyxb = self.objPyxbDeConstruction + + def buildObjPyxb(self, debug=False) : + if not self.cata or not self.cata.modeleMetier : return + if self.nom == 'Consigne' : return None + if debug : print (self.definition.nomComplet()) + if debug : print ('_______________ X_MCSIMP buildObjPyxb', self.nom, self,self.valeur) + if debug and self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb') + elif debug : print ('objPyxbDeConstruction', self.objPyxbDeConstruction) + + 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): + self.needFactory=True + self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory') + else : self.needFactory=False + else : + self.monNomClasseModeleMetier ='T_'+self.nom + if hasattr(self.definition,'nomXML') and self.definition.nomXML != None : self.monNomClasseModeleMetier='T_'+self.definition.nomXML + if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) : + nomComplet=self.definition.nomComplet() + if nomComplet in list(self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier].keys()): + 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 issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union): + if debug : print ('needFactory') + self.needFactory=True + self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory') + else : self.needFactory=False + + if self.valeur != None : + if self.needFactory : + if self.definition.max > 1 : + self.objPyxb=self.maClasseModeleMetier(self.valeur) + else : self.objPyxb=self.maClasseModeleMetierFactory(self.valeur) + else : self.objPyxb=self.maClasseModeleMetier(self.valeur) + else : + if self.needFactory : self.objPyxb=None + else : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False) + + + #if self.objPyxb !=None : self.objPyxb.objAccas=self + if debug : print ('X_MCSIMP', self.nom, self.objPyxb, ) + if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur) + + + def setValeurObjPyxb(self,newVal, debug=False): + if not self.cata or not self.cata.modeleMetier : return + if debug : print (' ___________________________ dans setValeurObjPyxb MCSIMP ', self.nom, newVal) + if debug : print (' self.perePyxb = ', self.perePyxb.nom) + if debug : print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb) + if debug : print ('debut du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent()) + + #if newVal != None : nvlObj=self.maClasseModeleMetier(newVal) + if newVal != None : + if self.needFactory : nvlObj=self.maClasseModeleMetierFactory(newVal) + else : nvlObj=self.maClasseModeleMetier(newVal) + else : + if self.needFactory : nvlObj =None + else : nvlObj=self.maClasseModeleMetier(_validate_constraints=False) + self.val=newVal + if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent()) + + if inspect.isclass(newVal) and issubclass(newVal,A_ASSD) : + newVal = newVal.nom + setattr(self.perePyxb.objPyxb,self.nom,nvlObj) + trouve=False + indice=0 + for i in self.perePyxb.objPyxb.orderedContent(): + if i.elementDeclaration.id() == self.nom: + #if isinstance(i._Content__value, self.maClasseModeleMetier) : + self.perePyxb.objPyxb.orderedContent()[indice]=self.perePyxb.objPyxb.orderedContent()[-1] + del(self.perePyxb.objPyxb.orderedContent()[-1]) + trouve=True + break + indice+=1 + if not trouve : print ('Attention souci au changement de valeur de ', self.nom) + self.objPyxb=nvlObj #self.objPyxb.objAccas=self - self.maClasseModeleMetier =type(self.objPyxb) - self.objPyxbDeConstruction = None - if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union): - self.needFactory=True - self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory') - print ('self.maClasseModeleMetierFactory', self.maClasseModeleMetierFactory) - else : self.needFactory=False - else : - self.monNomClasseModeleMetier ='T_'+self.nom - if hasattr(self.definition,'nomXML') and self.definition.nomXML != None : self.monNomClasseModeleMetier='T_'+self.definition.nomXML - if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) : - nomComplet=self.definition.nomComplet() - if nomComplet in list(self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier].keys()): - 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 issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union): - if debug : print ('needFactory') - self.needFactory=True - self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory') - else : self.needFactory=False - - if self.valeur != None : - if self.needFactory : - if self.definition.max > 1 : - self.objPyxb=self.maClasseModeleMetier(self.valeur) - else : self.objPyxb=self.maClasseModeleMetierFactory(self.valeur) - else : self.objPyxb=self.maClasseModeleMetier(self.valeur) - else : - if self.needFactory : self.objPyxb=None - else : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False) - - - #if self.objPyxb !=None : self.objPyxb.objAccas=self - debug=1 - if debug : print ('X_MCSIMP', self.nom, self.objPyxb, ) - if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur) - - - def setValeurObjPyxb(self,newVal, debug=False): - if not self.cata or not self.cata.modeleMetier : return - if debug : print (' ___________________________ dans setValeurObjPyxb MCSIMP ', self.nom, newVal) - if debug : print (' self.perePyxb = ', self.perePyxb.nom) - if debug : print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb) - if debug : print ('debut du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent()) - - #if newVal != None : nvlObj=self.maClasseModeleMetier(newVal) - if newVal != None : - if self.needFactory : nvlObj=self.maClasseModeleMetierFactory(newVal) - else : nvlObj=self.maClasseModeleMetier(newVal) - else : - if self.needFactory : nvlObj =None - else : nvlObj=self.maClasseModeleMetier(_validate_constraints=False) - self.val=newVal - if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent()) - - if inspect.isclass(newVal) and issubclass(newVal,A_ASSD) : - newVal = newVal.nom - setattr(self.perePyxb.objPyxb,self.nom,nvlObj) - trouve=False - indice=0 - for i in self.perePyxb.objPyxb.orderedContent(): - if i.elementDeclaration.id() == self.nom: - #if isinstance(i._Content__value, self.maClasseModeleMetier) : - self.perePyxb.objPyxb.orderedContent()[indice]=self.perePyxb.objPyxb.orderedContent()[-1] - del(self.perePyxb.objPyxb.orderedContent()[-1]) - trouve=True - break - indice+=1 - if not trouve : print ('Attention souci au changement de valeur de ', self.nom) - self.objPyxb=nvlObj - #self.objPyxb.objAccas=self - if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent()) - - - + if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent()) + + + class X_MCCOMPO(X_OBJECT) : # ------------------------- -# - def buildObjPyxb(self,mc_list, debug=True) : - if not self.cata or not self.cata.modeleMetier : return - - if debug : print ('X_MCCOMPO', self.nom) - self.listArg=[] - self.dicoArg={} - for objAccas in mc_list : - if objAccas.nature == 'MCBLOC' : - self.exploreBLOC(objAccas) - elif objAccas.nature == 'MCList' : - 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 : - if objAccas.nom == 'Consigne' : continue - self.listArg.append(objAccas.objPyxb) - self.dicoArg[objAccas.nom]=objAccas.objPyxb - objAccas.perePyxb=self - - if debug : print('X_MCCOMPO -- listArg ---',self.nom,self.listArg) - if debug : print('X_MCCOMPO -- dicoArg ---',self.nom,self.dicoArg) - - self.monNomClasseModeleMetier='T_'+self.nom - if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) : - self.nomComplet=self.definition.nomComplet() - self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][self.nomComplet] - print ('monNomClasseModeleMetier', self.monNomClasseModeleMetier) - self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) - - # PN : Ne doit-on pas tester avant - if self.objPyxbDeConstruction != None : - print ('avec objPyxbDeConstruction', self.objPyxbDeConstruction) - self.objPyxb = self.objPyxbDeConstruction - self.objPyxbDeConstruction = None - if debug : print ('je passe dans le if pour ', self.nom, self.objPyxb, self) - if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,self.objPyxb.orderedContent()) - else : - if debug : print (self.listArg) - if debug : print (self.maClasseModeleMetier) - # self.objPyxb=self.maClasseModeleMetier(*self.listArg) - self.objPyxb=self.maClasseModeleMetier(**self.dicoArg) - if debug : - print ('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') - newOrderedContent=[] - if debug : print ('list Arg') - for obj in self.listArg: - if debug : - print ('obj',obj) - print ('type obj', type(obj)) - print ('id(obj)', id(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 - max=obj[0].definition.max - else : max = 1 - if max == 1 : - #if not(issubclass(type(obj), pyxb.binding.basis.enumeration_mixin) ): - # newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] ) - #else : - # newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:type(o.value), self.objPyxb.orderedContent())).index(type(obj))] ) - # PN 22 sept 2020 . pourquoi pas toujours l id. le tyoe ne convient pas en cas d union d enum - newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(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)): newOrderedContent.append(c) - - 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()) - - - def exploreBLOC(self,objAccas,debug=True): - if debug : print (' ds exploreBLOC', objAccas.nom) - laListeSsLesBlocs=[] - for fils in objAccas.mcListe: - if fils.nature == 'MCBLOC' : - self.exploreBLOC(fils) - elif fils.nature == 'MCList' : - #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) +# + def buildObjPyxb(self,mc_list, debug=False) : + if not self.cata or not self.cata.modeleMetier : return + + if debug : print ('X_MCCOMPO', self.nom) + self.listArg=[] + self.dicoArg={} + for objAccas in mc_list : + if objAccas.nature == 'MCBLOC' : + self.exploreBLOC(objAccas) + elif objAccas.nature == 'MCList' : + 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 : + if objAccas.nom == 'Consigne' : continue + self.listArg.append(objAccas.objPyxb) + self.dicoArg[objAccas.nom]=objAccas.objPyxb + objAccas.perePyxb=self + + if debug : print('X_MCCOMPO -- listArg ---',self.nom,self.listArg) + if debug : print('X_MCCOMPO -- dicoArg ---',self.nom,self.dicoArg) + + self.monNomClasseModeleMetier='T_'+self.nom + if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) : + self.nomComplet=self.definition.nomComplet() + self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][self.nomComplet] + self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) + + # PN : Ne doit-on pas tester avant + if self.objPyxbDeConstruction != None : + self.objPyxb = self.objPyxbDeConstruction + self.objPyxbDeConstruction = None + if debug : print ('je passe dans le if pour ', self.nom, self.objPyxb, self) + if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,self.objPyxb.orderedContent()) else : - if fils.nom == "Consigne" : continue - self.listArg.append(fils.objPyxb) - self.dicoArg[fils.nom]=fils.objPyxb - fils.perePyxb=self - if debug : print (fils.nom ,' est un SIMP a pour pere Pyxb', self, self.nom) - print (self.listArg) - if debug : print ('fin ds exploreBLOC', objAccas .nom) - - - - + if debug : print (self.listArg) + if debug : print (self.maClasseModeleMetier) + # self.objPyxb=self.maClasseModeleMetier(*self.listArg) + self.objPyxb=self.maClasseModeleMetier(**self.dicoArg) + if debug : + 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') + newOrderedContent=[] + if debug : print ('list Arg') + for obj in self.listArg: + if debug : + print ('obj',obj) + print ('type obj', type(obj)) + print ('id(obj)', id(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 + max=obj[0].definition.max + else : max = 1 + if max == 1 : + #if not(issubclass(type(obj), pyxb.binding.basis.enumeration_mixin) ): + # newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] ) + #else : + # newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:type(o.value), self.objPyxb.orderedContent())).index(type(obj))] ) + # PN 22 sept 2020 . pourquoi pas toujours l id. le tyoe ne convient pas en cas d union d enum + newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(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)): newOrderedContent.append(c) + + 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()) + + + def exploreBLOC(self,objAccas,debug=False): + if debug : print (' ds exploreBLOC', objAccas.nom) + laListeSsLesBlocs=[] + for fils in objAccas.mcListe: + if fils.nature == 'MCBLOC' : + self.exploreBLOC(fils) + elif fils.nature == 'MCList' : + #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 + self.listArg.append(fils.objPyxb) + self.dicoArg[fils.nom]=fils.objPyxb + fils.perePyxb=self + if debug : print (fils.nom ,' est un SIMP a pour pere Pyxb', self, self.nom) + if debug : print ('fin ds exploreBLOC', objAccas .nom) + + + + class X_MCBLOC (X_MCCOMPO): # -------------------------- - def buildObjPyxb(self,mc_list,debug=False): - if not self.cata or not self.cata.modeleMetier : return - if debug : print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list, 'ne fait rien') - self.perePyxb=None - self.objPyxb=None - - def addObjPyxb(self, indiceDsLeContenu, debug=False): - if not self.cata or not self.cata.modeleMetier : return - if debug : print ('X_MCBLOC addObjPyxb', self.nom, self, self.mcListe, indiceDsLeContenu) - rangDeLObjet=indiceDsLeContenu - for obj in self.mcListe: - obj.addObjPyxb( rangDeLObjet) - rangDeLObjet=rangDeLObjet+obj.longueurDsArbre() - - def delObjPyxb(self, debug=False): - if not self.cata or not self.cata.modeleMetier : return - if debug : print ('X_MCBLOC delObjPyxb', self.nom, ' --------------------------') - for obj in self.mcListe: - obj.delObjPyxb() - if debug : print ('fin X_MCBLOC delObjPyxb --------------------------') + def buildObjPyxb(self,mc_list,debug=False): + if not self.cata or not self.cata.modeleMetier : return + if debug : print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list, 'ne fait rien') + self.perePyxb=None + self.objPyxb=None + + def addObjPyxb(self, indiceDsLeContenu, debug=False): + if not self.cata or not self.cata.modeleMetier : return + if debug : print ('X_MCBLOC addObjPyxb', self.nom, self, self.mcListe, indiceDsLeContenu) + rangDeLObjet=indiceDsLeContenu + for obj in self.mcListe: + obj.addObjPyxb( rangDeLObjet) + rangDeLObjet=rangDeLObjet+obj.longueurDsArbre() + + def delObjPyxb(self, debug=False): + if not self.cata or not self.cata.modeleMetier : return + if debug : print ('X_MCBLOC delObjPyxb', self.nom, ' --------------------------') + for obj in self.mcListe: + obj.delObjPyxb() + if debug : print ('fin X_MCBLOC delObjPyxb --------------------------') class X_MCLIST (X_MCCOMPO): # -------------------------- - - def buildObjPyxb(self,mc_list, debug=False): - if debug : print ('X_MCLIST buildObjPyxb ne fait rien', self.nom, self, mc_list) - pass - - def addObjPyxb(self,indiceDsLeContenu, debug=False): - if debug : print ('X_MCLIST addObjPyxb', self.nom, indiceDsLeContenu) - rangDeLObjet=indiceDsLeContenu - for objFils in self : - objFils.addObjPyxb(rangDeLObjet) - rangDeLObjet= rangDeLObjet + 1 - - def delObjPyxb(self, debug=False): - if not self.cata or not self.cata.modeleMetier : return - if debug : print ('X_MCLIST delObjPyxb', self.nom, ' --------------------------') - for obj in self: - obj.delObjPyxb() - if debug : print ('fin X_MCLIST delObjPyxb --------------------------') + + def buildObjPyxb(self,mc_list, debug=False): + if debug : print ('X_MCLIST buildObjPyxb ne fait rien', self.nom, self, mc_list) + pass + + def addObjPyxb(self,indiceDsLeContenu, debug=False): + if debug : print ('X_MCLIST addObjPyxb', self.nom, indiceDsLeContenu) + rangDeLObjet=indiceDsLeContenu + for objFils in self : + objFils.addObjPyxb(rangDeLObjet) + rangDeLObjet= rangDeLObjet + 1 + + def delObjPyxb(self, debug=False): + if not self.cata or not self.cata.modeleMetier : return + if debug : print ('X_MCLIST delObjPyxb', self.nom, ' --------------------------') + for obj in self: + obj.delObjPyxb() + if debug : print ('fin X_MCLIST delObjPyxb --------------------------') class X_MCFACT (X_MCCOMPO): # ------------------------- - pass + pass class X_ETAPE(X_MCCOMPO) : # ------------------------- - def metAJourNomASSD(self, nom,debug=False): - if not self.cata or not self.cata.modeleMetier : return - if debug : print ('X_ETAPE metAJourLesAttributs', self.nom, nom,' --------------------------') - self.objPyxb.sdName=nom + def metAJourNomASSD(self, nom,debug=False): + if not self.cata or not self.cata.modeleMetier : return + if debug : print ('X_ETAPE metAJourLesAttributs', self.nom, nom,' --------------------------') + self.objPyxb.sdName=nom class X_JDC (X_MCCOMPO): # --------------------- - - def __init__(self): - self.perePyxb=None - if not self.cata or not self.cata.modeleMetier : return - #if hasattr(self.cata,'DicoNomTypeDifferentNomElt') : print ('jkllllllllllllllll') - if not(hasattr(self.cata,'DicoNomTypeDifferentNomElt')) : self.cata.DicoNomTypeDifferentNomElt={} - self.monNomClasseModeleMetier=self.code - self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) - self.objPyxb=self.maClasseModeleMetier() - #self.objPyxb.objAccas=self - pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.NEVER) - pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION) - pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION) - - - - def enregistreEtapePyxb(self,etape,indice=0): - # 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 not self.cata.modeleMetier : return - self.objPyxb.append(etape.objPyxb) - etape.perePyxb = self - - #print (self.objPyxb.orderedContent()) - #if indice != (len(self.objPyxb.orderedContent()) ) : - # tampon=self.objPyxb.orderedContent()[-1] - # for i in reversed(range(len(self.objPyxb.orderedContent()))): - # self.objPyxb.orderedContent()[i]=self.objPyxb.orderedContent()[i-1] - # if i == indice + 1 : break - # self.objPyxb.orderedContent()[indice]=tampon - - #print (self.objPyxb.orderedContent()) - #try: - # self.objPyxb.validateBinding() - #except pyxb.ValidationError as e: - # print(e.details()) - - def toXml(self,fichier=None): - print ('ds to XML') - if not self.cata or not self.cata.modeleMetier : return - print (' to xml ***************',self.objPyxb,'***************',) - print (' to xml ***************',self,'***************',) - print (' to xml ***************',self.objPyxb.orderedContent(),'***************',) - print(self.objPyxb.toDOM().toprettyxml()) - print(self.objPyxb.toxml()) - return (self.objPyxb.toDOM().toprettyxml()) - - - def analyseFromXML(self,debug=False): - print ("je suis ds analyseFromXML -- > appel ds analyseXML de I_JDC.py") - print (self.procedure) - if self.procedure == "" : return - self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure) - if not hasattr(self.cata.modeleMetier,'AccasUserAssd'): - from Accas import UserASSD - self.cata.modeleMetier.AccasUserAssd=UserASSD - for contentObjEtape in self.objPyxb.orderedContent(): - objEtape=contentObjEtape.value - objEtape.dictArgs=(self.pyxbToDict(objEtape)) - objEtape.monNomClasseAccas=objEtape._ExpandedName.localName() - objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:] - # doute sur les 2 lignes suivantes : objEtape peut etre contentObjEtape 2juin20 - objEtape.dictPyxb['objEnPyxb']=objEtape - objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb - if debug : print ('dicoPyxbDeConstruction', objEtape.dictArgs['dicoPyxbDeConstruction']) - maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas) - if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh') - if debug : print ('maClasseAccas ', maClasseAccas) - if debug : print ('objEtape ', objEtape , type(objEtape)) - if debug : print ('nomClasseAccas ',objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas)) - if debug : print ('_ExpandedName ', objEtape._ExpandedName, type(objEtape._ExpandedName)) - if debug : print ('dictArgs ',objEtape.dictArgs) - if debug : print ('dictPyxb ',objEtape.dictPyxb) - # attention au call d Oper qui renomme l objet pyxb - if hasattr(objEtape,'sdName') : - if debug and hasattr(objEtape,'sdName') :print ('sdName',objEtape.sdName) - objAccasEtape=maClasseAccas(nomXML=objEtape.sdName, **(objEtape.dictArgs)) - else : objAccasEtape=maClasseAccas(**(objEtape.dictArgs)) - if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh') - - - def pyxbToDict(self,objAAnalyser, debug=False): - # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout - # faudrait - il travailler sur les types des objets ? - # c est a revoir -> fonction cast a prevoir ds les 2 sens - if objAAnalyser is None: return - if debug : print ('debut pour_____________________________ ',objAAnalyser) - dictArgs = {} - # traitement SIMP - # --------------- - if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition): - if debug : print ('je suis un MCSimple') - # traitement scalaire - objAAnalyser.dictPyxb=objAAnalyser - if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)): - # print ('je suis un scalaire') - #try : # python 3 - if isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssd): - import inspect - laClassePyxbUserAssd=inspect.getmro(objAAnalyser.__class__)[1] - return self.creeUserAssd(objAAnalyser,laClassePyxbUserAssd) - if isinstance(objAAnalyser, pyxb.binding.datatypes.boolean) : return bool(objAAnalyser) - if isinstance(objAAnalyser, str) : return str(objAAnalyser) - if isinstance(objAAnalyser, int) : return int(objAAnalyser) - if isinstance(objAAnalyser, float): return float(objAAnalyser) - if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin): return str(objAAnalyser) - #except : # python 2 - #if isinstance(objAAnalyser, types.StringTypes): return str(objAAnalyser) - #if isinstance(objAAnalyser, types.FloatType): return float(objAAnalyser) - #if isinstance(objAAnalyser, (types.IntType, types.LongType)): return int(objAAnalyser) - #print ('________ fin pour ', objAAnalyser, 'retour', repr(objAAnalyser)) - return objAAnalyser - else : - #print ('je suis une liste') - laListe=[] - for obj in objAAnalyser : - if isinstance(obj, str): laListe.append (str(obj)) - elif isinstance(obj, int): laListe.append (int(obj)) - elif isinstance(obj, float): laListe.append (float(obj)) - elif isinstance(obj, pyxb.binding.basis.enumeration_mixin): laListe.append(str(obj)) - else : laListe.append(obj) - return (laListe) - # if debug : print ('je suis Plural') - # ou ? return objAAnalyser - #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,) - #pour une enum getattr(value dans le type) - # return pythonLiteral(ReferenceFacet(facet=value, **kw)) - #print ('je suis un mot complexe') - # traitement FACT ou BLOC - # ------------------------ - # il faut traiter les fact multiples - objAAnalyser.dictPyxb = {} - objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser - #for expandedName, elementDeclaration in objAAnalyser._ElementMap.items(): - # objPyxbName = expandedName.localName() - # objPyxbValue = getattr(objAAnalyser, objPyxbName) - for objEltContentFils in objAAnalyser.orderedContent(): - objPyxbValue = objEltContentFils.value - objPyxbName = objEltContentFils.elementDeclaration.id() - elementDeclaration = objEltContentFils.elementDeclaration - #if objPyxbValue == None or objPyxbValue == [] : continue - if elementDeclaration.isPlural(): - if objPyxbName not in list(dictArgs.keys()) : dictArgs[objPyxbName]=[] - if objPyxbName not in list(objAAnalyser.dictPyxb.keys()) : objAAnalyser.dictPyxb[objPyxbName]=[] - dictArgs[objPyxbName].append(self.pyxbToDict(objPyxbValue)) - objAAnalyser.dictPyxb[objPyxbName].append(objPyxbValue.dictPyxb) - else: - dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName)) - objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb - # print ('ajout dans dictPyxb', objPyxbName, objPyxbValue.dictPyxb) - #print ('avec la valeur', 'de', objAAnalyser.dictPyxb[objPyxbName]) - - #print ("***********************************") - #print ('pyxbToDict fin pour ********** ', objAAnalyser) - #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb) - #print ('pyxbToDict fin pour ********** ', objAAnalyser) - #print ("***********************************") - #print (dictArgs) - #print (dictPyxb) - #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i])) - #print ('fin pour ',objAAnalyser) - return dictArgs - - def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd): - + + def __init__(self): + self.perePyxb=None + if not self.cata or not self.cata.modeleMetier : return + #if hasattr(self.cata,'DicoNomTypeDifferentNomElt') : print ('jkllllllllllllllll') + if not(hasattr(self.cata,'DicoNomTypeDifferentNomElt')) : self.cata.DicoNomTypeDifferentNomElt={} + self.monNomClasseModeleMetier=self.code + self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) + self.objPyxb=self.maClasseModeleMetier() + #self.objPyxb.objAccas=self + pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.NEVER) + pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION) + pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION) + + + + def enregistreEtapePyxb(self,etape,indice=0): + # 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 not self.cata.modeleMetier : return + self.objPyxb.append(etape.objPyxb) + etape.perePyxb = self + + #print (self.objPyxb.orderedContent()) + #if indice != (len(self.objPyxb.orderedContent()) ) : + # tampon=self.objPyxb.orderedContent()[-1] + # for i in reversed(range(len(self.objPyxb.orderedContent()))): + # self.objPyxb.orderedContent()[i]=self.objPyxb.orderedContent()[i-1] + # if i == indice + 1 : break + # self.objPyxb.orderedContent()[indice]=tampon + + #print (self.objPyxb.orderedContent()) + #try: + # self.objPyxb.validateBinding() + #except pyxb.ValidationError as e: + # print(e.details()) + + 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()) + return (self.objPyxb.toDOM().toprettyxml()) + + + def analyseFromXML(self,debug=False): + 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'): + from Accas import UserASSD + self.cata.modeleMetier.AccasUserAssd=UserASSD + for contentObjEtape in self.objPyxb.orderedContent(): + objEtape=contentObjEtape.value + objEtape.dictArgs=(self.pyxbToDict(objEtape)) + objEtape.monNomClasseAccas=objEtape._ExpandedName.localName() + objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:] + # doute sur les 2 lignes suivantes : objEtape peut etre contentObjEtape 2juin20 + objEtape.dictPyxb['objEnPyxb']=objEtape + objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb + if debug : print ('dicoPyxbDeConstruction', objEtape.dictArgs['dicoPyxbDeConstruction']) + maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas) + if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh') + if debug : print ('maClasseAccas ', maClasseAccas) + if debug : print ('objEtape ', objEtape , type(objEtape)) + if debug : print ('nomClasseAccas ',objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas)) + if debug : print ('_ExpandedName ', objEtape._ExpandedName, type(objEtape._ExpandedName)) + if debug : print ('dictArgs ',objEtape.dictArgs) + if debug : print ('dictPyxb ',objEtape.dictPyxb) + # attention au call d Oper qui renomme l objet pyxb + if hasattr(objEtape,'sdName') : + if debug and hasattr(objEtape,'sdName') :print ('sdName',objEtape.sdName) + objAccasEtape=maClasseAccas(nomXML=objEtape.sdName, **(objEtape.dictArgs)) + else : objAccasEtape=maClasseAccas(**(objEtape.dictArgs)) + if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh') + + + def pyxbToDict(self,objAAnalyser, debug=False): + # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout + # faudrait - il travailler sur les types des objets ? + # c est a revoir -> fonction cast a prevoir ds les 2 sens + if objAAnalyser is None: return + if debug : print ('debut pour_____________________________ ',objAAnalyser) + dictArgs = {} + # traitement SIMP + # --------------- + if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition): + if debug : print ('je suis un MCSimple') + # traitement scalaire + objAAnalyser.dictPyxb=objAAnalyser + if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)): + # print ('je suis un scalaire') + #try : # python 3 + if isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssd): + import inspect + laClassePyxbUserAssd=inspect.getmro(objAAnalyser.__class__)[1] + return self.creeUserAssd(objAAnalyser,laClassePyxbUserAssd) + if isinstance(objAAnalyser, pyxb.binding.datatypes.boolean) : return bool(objAAnalyser) + if isinstance(objAAnalyser, str) : return str(objAAnalyser) + if isinstance(objAAnalyser, int) : return int(objAAnalyser) + if isinstance(objAAnalyser, float): return float(objAAnalyser) + if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin): return str(objAAnalyser) + #except : # python 2 + #if isinstance(objAAnalyser, types.StringTypes): return str(objAAnalyser) + #if isinstance(objAAnalyser, types.FloatType): return float(objAAnalyser) + #if isinstance(objAAnalyser, (types.IntType, types.LongType)): return int(objAAnalyser) + #print ('________ fin pour ', objAAnalyser, 'retour', repr(objAAnalyser)) + return objAAnalyser + else : + #print ('je suis une liste') + laListe=[] + for obj in objAAnalyser : + if isinstance(obj, str): laListe.append (str(obj)) + elif isinstance(obj, int): laListe.append (int(obj)) + elif isinstance(obj, float): laListe.append (float(obj)) + elif isinstance(obj, pyxb.binding.basis.enumeration_mixin): laListe.append(str(obj)) + else : laListe.append(obj) + return (laListe) + # if debug : print ('je suis Plural') + # ou ? return objAAnalyser + #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,) + #pour une enum getattr(value dans le type) + # return pythonLiteral(ReferenceFacet(facet=value, **kw)) + #print ('je suis un mot complexe') + # traitement FACT ou BLOC + # ------------------------ + # il faut traiter les fact multiples + objAAnalyser.dictPyxb = {} + objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser + #for expandedName, elementDeclaration in objAAnalyser._ElementMap.items(): + # objPyxbName = expandedName.localName() + # objPyxbValue = getattr(objAAnalyser, objPyxbName) + for objEltContentFils in objAAnalyser.orderedContent(): + objPyxbValue = objEltContentFils.value + objPyxbName = objEltContentFils.elementDeclaration.id() + elementDeclaration = objEltContentFils.elementDeclaration + #if objPyxbValue == None or objPyxbValue == [] : continue + if elementDeclaration.isPlural(): + if objPyxbName not in list(dictArgs.keys()) : dictArgs[objPyxbName]=[] + if objPyxbName not in list(objAAnalyser.dictPyxb.keys()) : objAAnalyser.dictPyxb[objPyxbName]=[] + dictArgs[objPyxbName].append(self.pyxbToDict(objPyxbValue)) + objAAnalyser.dictPyxb[objPyxbName].append(objPyxbValue.dictPyxb) + else: + dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName)) + objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb + # print ('ajout dans dictPyxb', objPyxbName, objPyxbValue.dictPyxb) + #print ('avec la valeur', 'de', objAAnalyser.dictPyxb[objPyxbName]) + + #print ("***********************************") + #print ('pyxbToDict fin pour ********** ', objAAnalyser) + #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb) + #print ('pyxbToDict fin pour ********** ', objAAnalyser) + #print ("***********************************") + #print (dictArgs) + #print (dictPyxb) + #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i])) + #print ('fin pour ',objAAnalyser) + return dictArgs + + def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd): + nomClasseAccasUserAssd=laClassePyxbUserAssd.__name__[:-2] enCreation=False if laClassePyxbUserAssd.__name__[-2:]== '_C' : enCreation = True elif laClassePyxbUserAssd.__name__[-2:] != '_U' : print ('pb avec', laClassePyxbUserAssd); exit() laClasseAccas=getattr(self.cata,nomClasseAccasUserAssd) - if not(enCreation): - if str(objAAnalyser) in self.g_context.keys():return self.g_context[str(objAAnalyser)] - else : + if not(enCreation): + if str(objAAnalyser) in self.g_context.keys():return self.g_context[str(objAAnalyser)] + else : obj=laClasseAccas() self.g_context[str(objAAnalyser)]=obj return obj if str(objAAnalyser) in self.g_context.keys(): - if isinstance(self.g_context[str(objAAnalyser)],laClasseAccas): - return self.g_context[str(objAAnalyser)] - else : + if isinstance(self.g_context[str(objAAnalyser)],laClasseAccas): + return self.g_context[str(objAAnalyser)] + else : nvlObj=laClasseAccas() oldObj=self.g_context[str(objAAnalyser)] nvlObj.transfere(oldObj) self.g_context[str(objAAnalyser)]=nvlObj return nvlObj else : - obj=laClasseAccas() - self.g_context[str(objAAnalyser)]=obj - return obj - + obj=laClasseAccas() + self.g_context[str(objAAnalyser)]=obj + return obj + # def analyseContent(self,objAAnalyser): # objAAnalyser.dictArgs={} # for objContenu in objAAnalyser.content(): @@ -587,12 +580,12 @@ class X_JDC (X_MCCOMPO): # else : # self.analyseContent(objContenu) # objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.dictArgs - #print ( '________________') - #print (objAAnalyser.monNomClasseAccas) - #for i in objAAnalyser.dictArgs : print (i, objAAnalyser.dictArgs[i]) - #print ( '________________') - - + #print ( '________________') + #print (objAAnalyser.monNomClasseAccas) + #for i in objAAnalyser.dictArgs : print (i, objAAnalyser.dictArgs[i]) + #print ( '________________') + + if __name__ == "__main__": - print ('a faire') + print ('a faire') diff --git a/Efi2Xsd/balisesXSD.py b/Efi2Xsd/balisesXSD.py index 6cbd9c65..12387b09 100644 --- a/Efi2Xsd/balisesXSD.py +++ b/Efi2Xsd/balisesXSD.py @@ -45,7 +45,7 @@ finTypeCompo = '\t\n' eltCompoDsSequence = '\t\t\t\n' #eltCompoDsSequenceInExtension = '\t\t\t\n' -# ETAPE +# ETAPE eltEtape = '\t\n' # BLOC @@ -102,4 +102,3 @@ eltCata = '\t\n\t\t