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)
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
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)) :
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
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)
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')
# ETAPE
eltEtape = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="step_{}"/>\n'
-eltEtapeWithHelp = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="step_{}"/>\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:element>\n'
+eltEtapeWithHelp = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="step_{}">\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:element>\n'
# BLOC
debutTypeSubst = '\t<xs:group name="{}"> \n\t\t<xs:sequence>\n'
matriceSimpleType +='\t<xs:group name="{}_matrix">\n\t\t<xs:sequence>\n\t\t\t<xs:element name="line" type="{}:{}_line" minOccurs="{}" maxOccurs="{}"/>\n\t\t </xs:sequence>\n\t</xs:group>\n'
matriceSimpleType +='\t<xs:complexType name="{}"> \n\t\t<xs:group ref="{}:{}_matrix" minOccurs="1" maxOccurs="1"/>\n\t</xs:complexType>\n'
+# CHAINES AVEC BLANC
+debutChaineAvecBlancsInto = '\t<xs:simpleType name="{}_enum">\n\t\t<xs:restriction base="xs:string">\n'
+milieuChaineAvecBlancsInto = '\t\t\t<xs:enumeration value="{}"/>\n'
+finChaineAvecBlancsInto = '\t\t</xs:restriction>\n\t\t</xs:simpleType>\n'
+
+complexChaineAvecBlancs = '\t<xs:complexType name="{}">\n\t\t<xs:sequence maxOccurs="{}">\n\t\t\t\t<xs:element name="s__" type="{}_enum"/>\n\t\t\t</xs:sequence>\n\t</xs:complexType>\n'
+
+typeEltChaineAvecBlancSansInto = '\t\t<xs:simpleType name="{}_enum">\n\t\t\t<xs:restriction base="xs:string">\n\t\t\t</xs:restriction>\n\t\t</xs:simpleType>'
if __name__ == '__main__' :
print ('ne fait rien')
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 = []
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 :
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)
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) :
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
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]