From 6a2c61d51e7abc35d12088aebf88492dfe901a49 Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Thu, 10 Jun 2021 14:41:38 +0200 Subject: [PATCH] pour les chaines avec blancs --- Efi2Xsd/AccasXsd.py | 46 +++++++++++++++++++++++++++++++++++++++---- Efi2Xsd/MCAccasXML.py | 11 +++++++++-- Efi2Xsd/balisesXSD.py | 10 +++++++++- Noyau/N_MCSIMP.py | 11 ++++++++--- Noyau/N_SIMP.py | 17 +++++++++++++++- 5 files changed, 84 insertions(+), 11 deletions(-) diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index 9e01fc67..0f63f0d2 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -187,7 +187,7 @@ class X_definition: class X_compoFactoriseAmbigu(X_definition): # ---------------------------------------- - def __init__(self,nom,listeDeCreation,pere, debug=False): + def __init__(self,nom,listeDeCreation,pere, debug=True): if debug : for i in listeDeCreation : print (i.nom) @@ -945,6 +945,10 @@ class X_SIMP (X_definition): self.dumpSpecifiqueTuple(minOccurs) return + if self.avecBlancs and self.max > 1 : + self.dumpSpecifiqueTexteAvecBlancs(minOccurs,multiple) + return + #print ('minOccurs',minOccurs) # le defaut est dans l elt Name -> tester la coherence d existence avec Accas # regles Accas @@ -964,9 +968,7 @@ class X_SIMP (X_definition): if self.defaut : if self.max > 1 or self.max == '**' or self.max == float('inf') : txtDefaut="" - if not('TXM' in (self.type)) : separe = ' ' - else : separe ='\n' - for val in self.defaut : txtDefaut+=str(val) + separe + for val in self.defaut : txtDefaut+=str(val) + " " # cela ne fonctionne pas tres bien. a revoir txtDefaut+=txtDefaut[0:-1] if not('TXM' in (self.type)) : @@ -1057,6 +1059,42 @@ class X_SIMP (X_definition): self.texteSimple = self.texteSimplePart1 + self.texteSimplePart2 + def dumpSpecifiqueTexteAvecBlancs(self,minOccurs,multiple): + # attention multiple non traite + # pour l instant on n a pas max =1 et on ne traite pas les into + + texteAide = "" + if self.ang != '' : texteAide = self.ang + elif self.fr != '' : texteAide = self.fr + + self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide) + txtDefaut="" + # Pas de Defaut pour les string en XSD + # max sert pour la taille de la liste + if self.defaut : texteAide += ' Valeur par defaut dans le comm : '+str(self.defaut) + if texteAide != '' : self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide) + else : self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1) + + + if self.max == '**' or self.max == float('inf') : max='unbounded' + else : max = self.max + + if self.max > 1 : # juste au cas ou on traite 1 pareil + self.texteSimple = '' + cata = CONTEXT.getCurrentCata() + if self.nomDuTypePyxb in cata.listeTypeTXMAvecBlancs: return + cata.listeTypeTXMAvecBlancs.add(self.nomDuTypePyxb) + self.texteSimple = complexChaineAvecBlancs.format(self.nomDuTypePyxb,max,self.nomDuTypePyxb) + if self.intoXML != None : into = self.intoXML + else : into = self.into + if into == None : + self.texteSimple += typeEltChaineAvecBlancSansInto.format(self.nomDuTypePyxb) + else : + self.texteSimple += debutChaineAvecBlancsInto.format(self.nomDuTypePyxb) + for val in into : self.texteSimple += milieuChaineAvecBlancsInto.format(val) + self.texteSimple += finChaineAvecBlancsInto + + def dumpSpecifiqueTuple(self,minOccurs): self.nomDuTypeDeBase = self.traduitType() tousPareil=True diff --git a/Efi2Xsd/MCAccasXML.py b/Efi2Xsd/MCAccasXML.py index 82b544e8..c6937f8b 100755 --- a/Efi2Xsd/MCAccasXML.py +++ b/Efi2Xsd/MCAccasXML.py @@ -129,9 +129,8 @@ class X_OBJECT: class X_MCSIMP(X_OBJECT): # ----------------------- - def buildObjPyxb(self, debug=False) : + def buildObjPyxb(self, debug=True) : if not self.cata or not self.cata.modeleMetier : return - #if self.nom == 'initial_rod_positions' : debug = True if self.nom == 'Consigne' : return None if debug : print (self.definition.nomComplet()) if debug : print ('_______________ X_MCSIMP buildObjPyxb', self.nom, self,self.valeur) @@ -186,6 +185,14 @@ class X_MCSIMP(X_OBJECT): self.objPyxb.append(self.maClasseModeleMetier(*listeConstruction)) if debug : print (self.objPyxb) return + if self.waitChaineAvecBlancs() and self.definition.max > 1: + self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) + print (self.valeur) + self.objPyxb = self.maClasseModeleMetier(*self.valeur) + if debug : print ('X_MCSIMP', self.nom, self.objPyxb, ) + if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur) + return + if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union): if debug : print ('needFactory') diff --git a/Efi2Xsd/balisesXSD.py b/Efi2Xsd/balisesXSD.py index b925ac67..bde29bf2 100644 --- a/Efi2Xsd/balisesXSD.py +++ b/Efi2Xsd/balisesXSD.py @@ -52,7 +52,7 @@ eltCompoDsSequenceWithHelp = '\t\t\t\n\t\t\n\t\t\t\n\t\t \n\t\n' matriceSimpleType +='\t \n\t\t\n\t\n' +# CHAINES AVEC BLANC +debutChaineAvecBlancsInto = '\t\n\t\t\n' +milieuChaineAvecBlancsInto = '\t\t\t\n' +finChaineAvecBlancsInto = '\t\t\n\t\t\n' + +complexChaineAvecBlancs = '\t\n\t\t\n\t\t\t\t\n\t\t\t\n\t\n' + +typeEltChaineAvecBlancSansInto = '\t\t\n\t\t\t\n\t\t\t\n\t\t' if __name__ == '__main__' : print ('ne fait rien') diff --git a/Noyau/N_MCSIMP.py b/Noyau/N_MCSIMP.py index 29753a8a..046d2d08 100644 --- a/Noyau/N_MCSIMP.py +++ b/Noyau/N_MCSIMP.py @@ -86,8 +86,10 @@ class MCSIMP(N_OBJECT.OBJECT): else : #PNPN --> chgt pour Vimmp for v in self.valeur : - try : v.ajoutUtilisePar(self) - except : print ('il y a un souci ici', self.nom, self.valeur) + print (v, type(v)) + v.ajoutUtilisePar(self) + #try : v.ajoutUtilisePar(self) + #except : print ('il y a un souci ici', self.nom, self.valeur) self.buildObjPyxb() self.listeNomsObjsCrees = [] @@ -97,6 +99,7 @@ class MCSIMP(N_OBJECT.OBJECT): de la valeur donnée. Defaut si val == None Attention aux UserASSD et aux into (exple Wall gp de maille et 'Wall') """ + #print ('getValeurEffective ________________', val) if (val is None and hasattr(self.definition, 'defaut')): val = self.definition.defaut if self.definition.type[0] == 'TXM' and isinstance(val,str) : return val if self.definition.creeDesObjets : @@ -106,6 +109,7 @@ class MCSIMP(N_OBJECT.OBJECT): else : valATraiter=val listeRetour=[] for v in valATraiter: + #print (v.__class__.__name__, self.definition.creeDesObjetsDeType.__name__) if (not(v.__class__.__name__ == self.definition.creeDesObjetsDeType.__name__)) : if self.jdc != None and v in list(self.jdc.sdsDict.keys()): v=self.jdc.sdsDict[v] else : v=self.convProto.convert(v) @@ -115,7 +119,8 @@ class MCSIMP(N_OBJECT.OBJECT): else : if v.nom=='sansNom' : for leNom,laVariable in self.jdc.g_context.items(): - if id(laVariable)== id(v) and (leNom != 'sansNom'): + print (leNom,laVariable) + if id(laVariable) == id(v) and (leNom != 'sansNom'): v.initialiseNom(leNom) if v.parent== None : v.initialiseParent(self) if issubclass(self.definition.creeDesObjetsDeType, UserASSDMultiple) : diff --git a/Noyau/N_SIMP.py b/Noyau/N_SIMP.py index 58006da4..80f2d0c7 100644 --- a/Noyau/N_SIMP.py +++ b/Noyau/N_SIMP.py @@ -50,7 +50,8 @@ class SIMP(N_ENTITE.ENTITE): def __init__(self, typ,ang="", fr="", statut='f', into=None, intoSug = None,siValide = None, defaut=None, min=1, max=1, homo=1, position='local',filtre=None, val_min=float('-inf'), val_max=float('inf'), docu="", validators=None, nomXML=None, - sug=None,fenetreIhm=None, attribut=False, sortie='n', intoXML=None, metAJour=None): + sug=None,fenetreIhm=None, attribut=False, sortie='n', intoXML=None, metAJour=None, + avecBlancs=False): """ Un mot-clé simple est caractérisé par les attributs suivants : - type : cet attribut est obligatoire et indique le type de valeur attendue @@ -125,6 +126,20 @@ class SIMP(N_ENTITE.ENTITE): self.intoXML = intoXML self.sortie = sortie self.filtre = filtre + self.avecBlancs = avecBlancs + if not(self.avecBlancs) and self.max > 1 and 'TXM' in self.type and self.into != None : + for val in self.into : + if val.find(' ') : + self.avecBlancs = True + break + if not(self.avecBlancs) and self.max > 1 and 'TXM' in self.type and self.into != None : + for val in self.intoXML : + if val.find(' ') : + self.avecBlancs = True + break + if self.avecBlancs and not ('TXM' in self.type) : + print ('definition incoherente avecBlanc et non texte pour ', self) + exit() if self.filtre : self.filtreExpression = self.filtre[0] self.filtreVariables = self.filtre[1] -- 2.39.2