sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
import pyxb
-#import pyxb.binding
-#import pyxb.binding.saxer
+import pyxb.binding
+import pyxb.binding.basis
#import pyxb.utils.utility
#import pyxb.utils.domutils
+class X_OBJECT:
+# -------------
+ def deletePyxbObject(self):
+ print ('----------- deletePyxbObject', self.nom)
+ indice = 0
+ trouve = False
+ for i in self.perePyxb.objPyxb.orderedContent():
+ if id(self.objPyxb) == id(i._Content__value) : trouve = True ;break
+ indice = indice + 1
+ if not trouve : print ('objet pas trouve')
+ print (self.perePyxb.objPyxb.description)
+ del self.perePyxb.objPyxb.__dict__[self.nom]
+ print (self.perePyxb.objPyxb.__delattr__)
+ #delattr(self.perePyxb.objPyxb,self.nom)
+ # PNPN
+
+ print ('delattr', self.perePyxb.objPyxb,self.nom)
+ del self.perePyxb.objPyxb.orderedContent()[indice]
-class X_MCSIMP:
-# -------------
+
+class X_MCSIMP(X_OBJECT):
+# -----------------------
def buildObjPyxb(self) :
# self.valeur tient compte de la valeur par defaut
#if self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
if self.objPyxbDeConstruction != None :
self.objPyxb = self.objPyxbDeConstruction
+ self.maClasseModeleMetier =type(self.objPyxb)
+ #print (self.maClasseModeleMetier)
self.objPyxbDeConstruction = None
else :
self.monNomClasseModeleMetier='T_'+self.nom
if self.valeur != None : self.objPyxb=self.maClasseModeleMetier(self.valeur)
elif self.definition.into != None and 'TXM' in self.definition.type : self.objPyxb = None
else : self.objPyxb=self.maClasseModeleMetier();
- self.filsPyxb=None
+ #self.filsPyxb=None
#print ('X_MCSIMP', self.nom, self.objPyxb)
#print ('fin X_MCSIMP', self.objPyxb, self.nom,self)
def setValeurObjPyxb(self,newVal):
- #print ('dans setValeurObjPyxb')
+ print ('dans setValeurObjPyxb MCSIMP')
if not self.cata.modeleMetier : return
- try :
- print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom)
- except :
- print ("je sors du setValeur")
- return
+ # print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb)
if newVal != None : nvlObj=self.maClasseModeleMetier(newVal)
else : nvlObj=self.maClasseModeleMetier()
self.val=newVal
- indexOC=0
- #print ('avant',self.nom, self.perePyxb.objPyxb.orderedContent())
+ setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
+ print ('setattr', self.perePyxb.objPyxb,self.nom)
+ trouve=False
+ indice=0
for i in self.perePyxb.objPyxb.orderedContent():
- if id(i._Content__value) == id(self.objPyxb) : break
- indexOC +=1
-
- maSequence = getattr(self.perePyxb.objPyxb, self.nom)
- if isinstance(maSequence, pyxb.binding.basis.simpleTypeDefinition):
- #maSequence=nvlObj
- setattr(self.perePyxb.objPyxb, self.nom, nvlObj)
- self.perePyxb.objPyxb.orderedContent()[indexOC]=self.perePyxb.objPyxb.orderedContent()[-1]
- del(self.perePyxb.objPyxb.orderedContent()[-1])
- else :
- index=0
- for i in maSequence:
- if id(i) == id(self.objPyxb) : break
- index=index+1
- maSequence[index]=nvlObj
- self.perePyxb.objPyxb.orderedContent()[indexOC]._Content__value=nvlObj
-
+ 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
+ print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiii', nvlObj, id(nvlObj))
+ #for i in self.perePyxb.objPyxb.orderedContent():
+ # print ('ds le for pour i')
+ # print (i._Content__value)
+ # print (id(i._Content__value))
+ # print (type((i._Content__value)))
+ # if id(i._Content__value) == id(self.objPyxb) : break
+ # indexOC +=1
+
+ #maValeur = getattr(self.perePyxb.objPyxb, self.nom)
+ #print ('je change', indexOC)
+ #if isinstance(maValeur, pyxb.binding.basis.simpleTypeDefinition):
+ #if 1 :
+ # print ('jkjkljkljklj')
+ # setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
+ # self.perePyxb.objPyxb.orderedContent()[indexOC]=self.perePyxb.objPyxb.orderedContent()[-1]
+ # del(self.perePyxb.objPyxb.orderedContent()[-1])
+ #print ('apres',self.nom, self.perePyxb.objPyxb.orderedContent())
+ #else :
+ # index=0
+ # trouve=False
+ # try :
+ # for i in maValeur:
+ # if id(i) == id(self.objPyxb) :trouve = True ; break
+ # index=index+1
+ # maValeur[index]=nvlObj
+ # self.perePyxb.objPyxb.orderedContent()[indexOC]._Content__value=nvlObj
+ # except : pass
+ # if not trouve : print (self.nom , 'pas trouve')
+ #print ('arret programme'); exit()
#print ('id objPyxb',id(self.objPyxb))
#print ('id objPyxb[0]',id(self.objPyxb[0]))
#print (self.perePyxb.objPyxb.orderedContent())
#print (monBinding)
- def deletePyxbObject(self):
- print ('je passe ds deletePyxbObject pour ', self, self.nom)
+ def addPyxbObject(self, indiceDsLeContenu):
+ if not self.cata.modeleMetier : return
-class X_MCCOMPO:
-# --------------
+ # adherence Accas sur le parent
+ parent=self.parent
+ while (parent.isBLOC() ): parent=parent.parent
+ self.perePyxb=parent
+
+ self.monNomClasseModeleMetier='T_'+self.nom
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+ nvlObj=self.maClasseModeleMetier()
+ print ('setattr', self.perePyxb.objPyxb,self.nom)
+ setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
+ tampon=self.perePyxb.objPyxb.orderedContent()[-1]
+ self.objPyxb = nvlObj
+ indexOC=-1
+ longueur=len(self.perePyxb.objPyxb.orderedContent())
+ for i in reversed(range(longueur)):
+ self.perePyxb.objPyxb.orderedContent()[i]=self.perePyxb.objPyxb.orderedContent()[i-1]
+ if i == indiceDsLeContenu + 1 : break
+ self.perePyxb.objPyxb.orderedContent()[indiceDsLeContenu]=tampon
+
+
+ #for i in self.perePyxb.objPyxb.orderedContent() :
+ # print (i._Content__value, type(i._Content__value))
+ #print ('----------------')
+
+ #print self.perePyxb.objPyxb.orderedContent()
+ #for i in self.perePyxb.objPyxb.orderedContent():
+ # print ('valeur de ', i)
+ # print (i._Content__value)
+ # print (type(i._Content__value))
+ # if isinstance(i._Content__value, self.maClasseModeleMetier) :
+ # print dir(i._Content__value)
+ # self.objPyxb = i._Content__value
+ # setattr(self.perePyxb.objPyxb, self.nom, nvlObj)
+ # self.perePyxb.objPyxb.orderedContent()[indexOC]=self.perePyxb.objPyxb.orderedContent()[-1]
+ # del(self.perePyxb.objPyxb.orderedContent()[-1])
+ # indexOC+=1
+ #PNPNPNPNPNPNPNPNP
+
+class X_MCCOMPO(X_OBJECT) :
+# -------------------------
#
def buildObjPyxb(self,mc_list) :
- if not self.cata.modeleMetier : return
#print ('________________________________________________')
#print ('X_MCCOMPO buildObjPyxb', self.nom, self, mc_list)
+ if not self.cata.modeleMetier : return
self.listArg=[]
for objAccas in mc_list :
else :
self.listArg.append(objAccas.objPyxb)
objAccas.perePyxb=self
- #print (objAccas.nom ,' a pour pere Pyxb', self, self.nom)
+ print (objAccas.nom ,' a pour pere Pyxb', self, self.nom)
self.monNomClasseModeleMetier='T_'+self.nom
self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
def exploreBLOC(self,objAccas):
laListeSsLesBlocs=[]
- for fils in objAccas.mc_liste:
+ for fils in objAccas.mcListe:
if fils.nature == 'MCBLOC' :
self.exploreBLOC(fils)
elif fils.nature == 'MCList' :
#print ('_______________________________________')
#print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list)
# on rattache ses fils au bloc mais leur pere sera ensuite le MCCOMPO qui contient le bloc
- # Pas sur d en avoir besoin
+ # Pas sur d en avoir besoin du filsPyxb
self.filsPyxb=[]
self.objPyxb=None
for objAccas in mc_list :
# listArg=[]
# MCList est une liste
# for nbDeSequence in self :
- # for objAccas in nbDeSequence.mc_liste :
+ # for objAccas in nbDeSequence.mcListe :
#print (type (objAccas))
#print (objAccas.nom, objAccas.objPyxb, type(objAccas.objPyxb))
#print ( type (objAccas.objPyxb) == list )
objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
# attention objAccasEtape = None normal (cf buildSd)
- print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
- print (objEtape , type(objEtape))
- print (objEtape.dictPyxb)
- print (maClasseAccas)
- print (objAccasEtape)
+ #print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
+ #print (objEtape , type(objEtape))
+ #print (objEtape.dictPyxb)
+ #print (maClasseAccas)
+ #print (objAccasEtape)
#print (objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
#print (objEtape._ExpandedName, type(objEtape._ExpandedName))
#print (objEtape.dictPyxb[u'experience'])
#print (objEtape.dictArgs)
#print (objEtape.dictPyxb)
- print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
+ #print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
#exit()
self.etape = None
self.state = 'undetermined'
self.actif=1
- self.mc_liste=self.build_mc()
+ self.mcListe=self.buildMc()
- def build_mc(self):
+ def buildMc(self):
"""
Construit la liste des sous-entites de MCNUPLET
a partir de la liste des arguments (valeur)
"""
args = self.valeur
if args ==None : args =()
- mc_liste=[]
+ mcListe=[]
# on cree les sous entites du NUPLET a partir des valeurs initiales
k=0
if objet.definition.position == 'global' :
self.append_mc_global(objet)
#XXX et global_jdc ??
- mc_liste.append(objet)
+ mcListe.append(objet)
k=k+1
# Un nuplet n'a pas de mots inconnus
self.reste_val={}
- return mc_liste
+ return mcListe
def isValid(self,cr='non'):
"""
old_valid = self.valid
else:
old_valid = None
- for child in self.mc_liste :
+ for child in self.mcListe :
if not child.isValid():
valid = 0
break
- if len(self.mc_liste) != len(self.definition.entites):
+ if len(self.mcListe) != len(self.definition.entites):
valid=0
if cr == 'oui' :
self.cr.fatal(''.join(("Nuplet : ",self.nom,tr("Longueur incorrecte"))))
"""
# Un nuplet est toujours une liste de mots cles simples
# On retourne donc la valeur
- return self.mc_liste[key].valeur
+ return self.mcListe[key].valeur
def __str__(self):
"""
de caracteres
"""
s='('
- for e in self.mc_liste:
+ for e in self.mcListe:
s=s + str(e.valeur) + ','
return s + ')'
de caracteres
"""
s='('
- for e in self.mc_liste:
+ for e in self.mcListe:
s=s + str(e.valeur) + ','
return s + ')'
des mots cle simples contenus.
"""
l=[]
- for v in self.mc_liste:
+ for v in self.mcListe:
l.append(v.valeur)
return l
Elle est utilisee par la methode getMocle
"""
l=[]
- for v in self.mc_liste:
+ for v in self.mcListe:
l.append(v.valeur)
return l
return
def updateConcept(self,sd):
- for child in self.mc_liste :
+ for child in self.mcListe :
child.updateConcept(sd)
def deleteConcept(self,sd):
if self.reuse and self.reuse == sd:
self.sd=self.reuse=None
self.initModif()
- for child in self.mc_liste :
+ for child in self.mcListe :
child.deleteConcept(sd)
def replaceConcept(self,old_sd,sd):
if self.reuse and self.reuse == old_sd:
self.sd=self.reuse=sd
self.initModif()
- for child in self.mc_liste :
+ for child in self.mcListe :
child.replaceConcept(old_sd,sd)
def resetContext(self):
liste_sd = self.getSd_utilisees()
l_noms = []
if type(self.definition.sd_prod) == types.FunctionType:
- d=self.creeDictValeurs(self.mc_liste)
+ d=self.creeDictValeurs(self.mcListe)
try:
classe_sd_prod = self.definition.sd_prod(*(), **d)
except:
avant etape, sinon enleve la referea ces concepts
"""
#print "verifExistenceSd",self.sd
- for motcle in self.mc_liste :
+ for motcle in self.mcListe :
motcle.verifExistenceSd()
def updateMcGlobal(self):
interpreteur = interpreteur_formule.Interpreteur_Formule
def MCBuild(self):
- self.mc_liste=self.build_mc()
+ self.mcListe=self.buildMc()
# on cree la liste des types autorises (liste des noms de mots-cles
# simples dans le catalogue de FORMULE)
self.l_types_autorises = list(self.definition.entites.keys())
- les arguments de la FORMULE
- le corps de la FORMULE, cad son expression
"""
- if len(self.mc_liste) == 0:
+ if len(self.mcListe) == 0:
# pas de fils pour self --> la FORMULE est incomplete
return None,None,None
type_retourne="REEL"
- if len(self.mc_liste) > 0:
- child = self.mc_liste[0] # child est un MCSIMP
+ if len(self.mcListe) > 0:
+ child = self.mcListe[0] # child est un MCSIMP
corps = child.getVal()
else:
corps = None
- if len(self.mc_liste) > 1:
- child = self.mc_liste[1]
+ if len(self.mcListe) > 1:
+ child = self.mcListe[1]
l_args= child.getVal()
else :
l_args=None
self.type_retourne = formule[1]
self.arguments = '('+formule[2]+')'
self.corps = formule[3]
- # il faut ajouter le mot-cle simple correspondant dans mc_liste
- # pour cela on utilise la methode generale build_mc
+ # il faut ajouter le mot-cle simple correspondant dans mcListe
+ # pour cela on utilise la methode generale buildMc
# du coup on est oblige de modifier le dictionnaire valeur de self ...
self.valeur = {}
self.valeur[self.type_retourne] = self.arguments+' = ' + self.corps
# corps de la fonction
# il faut aussi que les arguments soient sous forme de tuple
def updateFormulePython(self,formule):
- self.build_mc()
- self.mc_liste=[]
+ self.buildMc()
+ self.mcListe=[]
if len(formule) < 4 :
return 0
arguments=formule[3]
child=self.definition.entites[k](None,nom=k,parent=self)
child.valeur=mocles[k]
child.state = 'modified'
- self.mc_liste.append(child)
+ self.mcListe.append(child)
self.corps = formule[2]
self.type_retourne = formule[1]
def listeMcPresents(self):
"""
Retourne la liste des noms des mots-cles fils de self presents construite
- a partir de self.mc_liste
+ a partir de self.mcListe
"""
l=[]
- for v in self.mc_liste:
+ for v in self.mcListe:
k=v.nom
l.append(k)
return l
index=index+1
return index
+ def findRangObjetDsArbre(self,objet) :
+ # uniquement pour Pyxb
+ # parcourt les Blocs
+ leRang=0
+ pos=self.mcListe.index(objet)
+ i=0
+ while (i+1) < pos :
+ leRang= leRang + self.mcListe[i].longueurDsArbre()
+ i=i+1
+ return leRang
+
+
def ordonneListeMc(self,listeMc_a_ordonner,liste_noms_mc_ordonnee):
"""
Retourne listeMc_a_ordonner ordonnee suivant l'ordre
Retourne 1 si la suppression a pu etre effectuee,
Retourne 0 dans le cas contraire
"""
- if not objet in self.mc_liste:
- # Impossible de supprimer objet. Il n'est pas dans mc_liste
+ if not objet in self.mcListe:
+ # Impossible de supprimer objet. Il n'est pas dans mcListe
return 0
self.initModif()
- self.mc_liste.remove(objet)
- CONNECTOR.Emit(self,"supp",objet)
objet.deletePyxbObject()
+ self.mcListe.remove(objet)
+ CONNECTOR.Emit(self,"supp",objet)
objet.deleteMcGlobal()
objet.updateConditionBloc()
objet.supprime()
# Le mot cle n'existe pas encore. On l'ajoute a la position
# demandee (pos)
if pos == None :
- self.mc_liste.append(objet)
+ self.mcListe.append(objet)
else :
- self.mc_liste.insert(pos,objet)
+ self.mcListe.insert(pos,objet)
# Il ne faut pas oublier de reaffecter le parent d'obj (si copie)
objet.reparent(self)
+ objet.addPyxbObject(self.findRangObjetDsArbre(objet))
CONNECTOR.Emit(self,"add",objet)
objet.updateMcGlobal()
objet.updateConditionBloc()
return 1
def updateConcept(self,sd):
- for child in self.mc_liste :
+ for child in self.mcListe :
child.updateConcept(sd)
def deleteConcept(self,sd):
Seuls les mots cles simples MCSIMP font un traitement autre que
de transmettre aux fils
"""
- for child in self.mc_liste :
+ for child in self.mcListe :
child.deleteConcept(sd)
def replaceConcept(self,old_sd,sd):
Mettre a jour les fils de l objet suite au remplacement du
concept old_sd
"""
- for child in self.mc_liste :
+ for child in self.mcListe :
child.replaceConcept(old_sd,sd)
def getListeMcInconnus(self):
if self.reste_val != {}:
for k,v in self.reste_val.items() :
l_mc.append([self,k,v])
- for child in self.mc_liste :
+ for child in self.mcListe :
if child.isValid() : continue
l_child = child.getListeMcInconnus()
for mc in l_child:
des blocs conditionnels par appel de la methode updateConditionBloc
"""
self._updateConditionBloc()
- for mcobj in self.mc_liste:
+ for mcobj in self.mcListe:
if hasattr(mcobj,"deepUpdateConditionBloc"):
mcobj.deepUpdateConditionBloc()
"""
Realise l'update des blocs conditionnels fils de self
"""
- dict = self.creeDictCondition(self.mc_liste,condition=1)
+ dict = self.creeDictCondition(self.mcListe,condition=1)
for k,v in self.definition.entites.items():
if v.label != 'BLOC' :continue
globs= self.jdc and self.jdc.condition_context or {}
"""
liste_ajouts = []
liste_retraits = []
- dict = self.creeDictCondition(self.mc_liste,condition=1)
+ dict = self.creeDictCondition(self.mcListe,condition=1)
for k,v in self.definition.entites.items():
if v.label=='BLOC' :
globs= self.jdc and self.jdc.condition_context or {}
Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
avant etape, sinon enleve la reference a ces concepts
"""
- for motcle in self.mc_liste :
+ for motcle in self.mcListe :
motcle.verifExistenceSd()
def updateMcGlobal(self):
Un mot cle compose ne peut pas etre global. Il se contente de passer
la requete a ses fils.
"""
- for motcle in self.mc_liste :
+ for motcle in self.mcListe :
motcle.updateMcGlobal()
def deleteMcGlobal(self):
- for motcle in self.mc_liste :
+ for motcle in self.mcListe :
motcle.deleteMcGlobal()
try :
motcle.updateMcGlobal()
self.parent.updateConditionBloc()
def setValeur(self,new_valeur,evaluation='oui'):
- #print "setValeur",new_valeur
+ print ("setValeur Ihm/IMCSIMP ",new_valeur)
self.initModif()
self.valeur = new_valeur
self.val = new_valeur
+ self.setValeurObjPyxb(new_valeur)
self.updateConditionBloc()
self.etape.modified()
self.finModif()
Inputs :
- sd=concept detruit
"""
- for child in self.mc_liste :
+ for child in self.mcListe :
child.deleteConcept(sd)
def replaceConcept(self,old_sd,sd):
- old_sd=concept remplace
- sd=nouveau concept
"""
- for child in self.mc_liste :
+ for child in self.mcListe :
child.replaceConcept(old_sd,sd)
#ATTENTION SURCHARGE: a garder en synchro ou a reintegrer dans le Noyau
def onAdd(self,object):
if self.JESUISOFF==1 : return
- #print "onAdd pour ", self.item.nom, object.nom
+ #print ("onAdd pour ", self.item.nom, object)
self.editor.initModif()
self.updateNodes()
# PN -- non necessaire si item=jdc
def onSupp(self,object):
if self.JESUISOFF==1 : return
- #print "onSup pour ", self.item.nom, object.nom
+ #print "onSup pour ", self.item.nom, object
self.editor.initModif()
self.updateNodes()
# PN -- non necessaire si item=jdc
itemNode=Node
#def get_objet(self,name) :
- # for v in self.object.mc_liste:
+ # for v in self.object.mcListe:
# if v.nom == name : return v
# return None
"""
Reactualise la liste des items fils stockes dans self.sublist
"""
- liste=self.object.mc_liste
+ liste=self.object.mcListe
sublist=[None]*len(liste)
# suppression des items lies aux objets disparus
for item in self.sublist:
Retourne les arguments de la FORMULE
"""
args=""
- for mot in self.object.mc_liste:
+ for mot in self.object.mcListe:
if mot.nom == 'NOM_PARA':
args=mot.valeur
break
Retourne le corps de la FORMULE
"""
corps=""
- for mot in self.object.mc_liste:
+ for mot in self.object.mcListe:
if mot.nom == 'VALE':
corps=mot.valeur
break
# return self.labeltext, None, None #CS_pbruno todo
#def get_objet(self,name) :
- # for v in self.object.mc_liste:
+ # for v in self.object.mcListe:
# if v.nom == name : return v
# return None
Reactualise la liste des items fils stockes dans self.sublist
"""
if self.isActif():
- liste=self.object.mc_liste
+ liste=self.object.mcListe
else:
liste=[]
'\n', "Erreur dans la condition : ", self.condition, ''.join(l))
else:
return 0
-
+
+ def longueurDsArbre(self):
+ longueur=0
+ for mc in self.mcListe :
+ longueur = longueur + longueurDsArbre(mc)
+ return longueur
def blocUtils():
"""Définit un ensemble de fonctions utilisables pour écrire les
mcs.update(liste)
print (self.nom, mcs)
return mcs
-
def MCBuild(self):
"""
Demande la construction des sous-objets et les stocke dans l'attribut
- mc_liste.
+ mcListe.
"""
- self.mc_liste = self.build_mc()
+ self.mcListe = self.buildMc()
def buildSd(self, nom):
"""
on construit le sd a partir de cette classe
et on le retourne
- cas 2 : il s'agit d'une fonction
- on l'evalue avec les mots-cles de l'etape (mc_liste)
+ on l'evalue avec les mots-cles de l'etape (mcListe)
on construit le sd a partir de la classe obtenue
et on le retourne
"""
if type(self.definition.sd_prod) == types.FunctionType:
- d = self.creeDictValeurs(self.mc_liste)
+ d = self.creeDictValeurs(self.mcListe)
try:
sd_prod = self.definition.sd_prod(*(), **d)
except EOFError:
il s'agit d'une sous classe de ASSD
on retourne le nom de la classe
- cas 2 : il s'agit d'une fonction
- on l'evalue avec les mots-cles de l'etape (mc_liste)
+ on l'evalue avec les mots-cles de l'etape (mcListe)
et on retourne son resultat
"""
if type(self.definition.sd_prod) == types.FunctionType:
- d = self.creeDictValeurs(self.mc_liste)
+ d = self.creeDictValeurs(self.mcListe)
sd_prod = self.definition.sd_prod(*(), **d)
else:
sd_prod = self.definition.sd_prod
etape.reuse = None
etape.sdnom = None
etape.etape = etape
- etape.mc_liste = []
- for objet in self.mc_liste:
+ etape.mcListe = []
+ for objet in self.mcListe:
new_obj = objet.copy()
new_obj.reparent(etape)
- etape.mc_liste.append(new_obj)
+ etape.mcListe.append(new_obj)
return etape
def copyReuse(self, old_etape):
self.parent = parent
self.jdc = parent.getJdcRoot()
self.etape = self
- for mocle in self.mc_liste:
+ for mocle in self.mcListe:
mocle.reparent(self)
if self.sd and self.reuse == None:
self.sd.jdc = self.jdc
on construit le sd a partir de cette classe
et on le retourne
- cas 2 : sd_prod est une fonction
- on l'evalue avec les mots-cles de l'etape (mc_liste)
+ on l'evalue avec les mots-cles de l'etape (mcListe)
on construit le sd a partir de la classe obtenue
et on le retourne
"""
self.typret = None
if type(self.definition.sd_prod) == types.FunctionType:
- d = self.creeDictValeurs(self.mc_liste)
+ d = self.creeDictValeurs(self.mcListe)
try:
# la sd_prod d'une macro a l'objet macro_etape lui meme en premier argument
# Comme sd_prod peut invoquer la methode typeSDProd qui ajoute
il s'agit d'une sous classe de ASSD
on retourne le nom de la classe
- cas 2 : il s'agit d'une fonction
- on l'evalue avec les mots-cles de l'etape (mc_liste)
+ on l'evalue avec les mots-cles de l'etape (mcListe)
et on retourne son resultat
"""
if not force and hasattr(self, 'typret'):
return self.typret
if type(self.definition.sd_prod) == types.FunctionType:
- d = self.creeDictValeurs(self.mc_liste)
+ d = self.creeDictValeurs(self.mcListe)
# Comme sd_prod peut invoquer la methode typeSDProd qui ajoute
# les concepts produits dans self.sdprods, il faut le mettre a zero
self.sdprods = []
- parent : le créateur du bloc. Ce peut etre un mot-clé facteur ou un autre objet composite de type
OBJECT. Si parent vaut None, le bloc ne possède pas de contexte englobant.
- - mc_liste : liste des sous-objets du bloc construite par appel à la méthode build_mc
+ - mcListe : liste des sous-objets du bloc construite par appel à la méthode buildMc
"""
#print ('MCBLOC' , val, definition, nom, parent)
self.jdc = None
self.niveau = None
self.etape = None
- self.mc_liste = self.build_mc()
+ self.mcListe = self.buildMc()
def getValeur(self):
"""
Retourne la "valeur" de l'objet bloc. Il s'agit d'un dictionnaire dont
- les clés seront les noms des objets de self.mc_liste et les valeurs
- les valeurs des objets de self.mc_liste obtenues par application de
+ les clés seront les noms des objets de self.mcListe et les valeurs
+ les valeurs des objets de self.mcListe obtenues par application de
la méthode getValeur.
Dans le cas particulier d'un objet bloc les éléments du dictionnaire
"""
dico = {}
- for mocle in self.mc_liste:
+ for mocle in self.mcListe:
if mocle.isBLOC():
# Si mocle est un BLOC, on inclut ses items dans le dictionnaire
# représentatif de la valeur de self. Les mots-clés fils de blocs sont
"""
- def build_mc(self):
+ def buildMc(self):
"""
Construit la liste des sous-entites du MCCOMPO
à partir du dictionnaire des arguments (valeur)
#import traceback
#traceback.print_stack()
- #print(("MCCOMPO.build_mc _____________________________________", self.nom))
+ #print(("MCCOMPO.buildMc _____________________________________", self.nom))
#print (self.dicoPyxbDeConstruction)
if CONTEXT.debug:
- print(("MCCOMPO.build_mc ", self.nom))
+ print(("MCCOMPO.buildMc ", self.nom))
# Dans la phase de reconstruction args peut contenir des mots-clés
# qui ne sont pas dans le dictionnaire des entites de definition (self.definition.entites)
# de l'objet courant (self)
# (petits-fils, ...)
args = self.valeur
if args == None: args = {}
- mc_liste = []
+ mcListe = []
# On recopie le dictionnaire des arguments pour protéger l'original des
else :
objPyxbDeConstruction=None
objet = v(val=args.get(k, None), nom=k, parent=self,objPyxbDeConstruction=objPyxbDeConstruction)
- mc_liste.append(objet)
+ mcListe.append(objet)
# Si l'objet a une position globale on l'ajoute aux listes
# correspondantes
if hasattr(objet.definition, 'position'):
else :
dicoPyxbDeConstruction=None
objet = v(val=args.get(k, None), nom=k, parent=self,dicoPyxbDeConstruction=dicoPyxbDeConstruction)
- mc_liste.append(objet)
+ mcListe.append(objet)
if k in args:
del args[k]
# Phase 2:
# On construit les objets (en général, blocs) conditionnés par les mots-clés précédemment créés.
- # A ce stade, mc_liste ne contient que les fils de l'objet courant
+ # A ce stade, mcListe ne contient que les fils de l'objet courant
# args ne contient plus que des mots-clés qui n'ont pas été attribués car ils sont
# à attribuer à des blocs du niveau inférieur ou bien sont des mots-clés erronés
for k, v in list(self.definition.entites.items()):
#PNPN on recalcule dico_valeurs dans le for
# pour les globaux imbriques (exple Telemac Advection)
# avant le calcul etait avant le for
- dico_valeurs = self.creeDictCondition(mc_liste, condition=1)
+ dico_valeurs = self.creeDictCondition(mcListe, condition=1)
globs = self.jdc and self.jdc.condition_context or {}
if v.verifPresence(dico_valeurs, globs):
# Si le bloc existe :
# 1- on le construit
- # 2- on l'ajoute à mc_liste
+ # 2- on l'ajoute à mcListe
# 3- on récupère les arguments restant
- # 4- on reconstruit le dictionnaire équivalent à mc_liste
+ # 4- on reconstruit le dictionnaire équivalent à mcListe
bloc = v(nom=k, val=args, parent=self,dicoPyxbDeConstruction=self.dicoPyxbDeConstruction)
- mc_liste.append(bloc)
+ mcListe.append(bloc)
args = bloc.reste_val
# On ne recalcule pas le contexte car on ne tient pas compte des blocs
# pour évaluer les conditions de présence des blocs
- # dico_valeurs = self.creeDictValeurs(mc_liste)
+ # dico_valeurs = self.creeDictValeurs(mcListe)
# On conserve les arguments superflus dans l'attribut reste_val
self.reste_val = args
# On ordonne la liste ainsi créée suivant l'ordre du catalogue
# (utile seulement pour IHM graphique)
- mc_liste = self.ordonneListe(mc_liste)
+ mcListe = self.ordonneListe(mcListe)
# on retourne la liste ainsi construite
self.cata=self.jdc.cata
- self.buildObjPyxb(mc_liste)
+ self.buildObjPyxb(mcListe)
#else : print ('pas de construction pour ', self.nom, self.objPyxbDeConstruction)
#print ('buildObjPyxb : ' , self.nom)
- print(("MCCOMPO.build_mc fin_____________________________________", self.nom))
- return mc_liste
+ #print(("MCCOMPO.buildMc fin_____________________________________", self.nom))
+ return mcListe
- def ordonneListe(self, mc_liste):
+ def ordonneListe(self, mcListe):
"""
Ordonne la liste suivant l'ordre du catalogue.
Seulement pour IHM graphique
if self.jdc and self.jdc.cata_ordonne_dico != None:
liste_noms_mc_ordonnee = self.getListeMcOrdonneeBrute(
self.getGenealogie(), self.jdc.cata_ordonne_dico)
- return self.ordonneListeMc(mc_liste, liste_noms_mc_ordonnee)
+ return self.ordonneListeMc(mcListe, liste_noms_mc_ordonnee)
else:
- return mc_liste
+ return mcListe
def creeDictValeurs(self, liste=[], condition=0):
"""
- ajouter tous les mots-clés globaux (attribut position = 'global'
et 'global_jdc')
- L'argument liste est, en général, une mc_liste en cours de
+ L'argument liste est, en général, une mcListe en cours de
construction, contenant les mots-clés locaux et les blocs déjà créés.
"""
return dico
def creeDictToutesValeurs(self):
- """Semblable à `creeDictValeurs(liste=self.mc_liste)` en supprimant les
+ """Semblable à `creeDictValeurs(liste=self.mcListe)` en supprimant les
valeurs None."""
- dico = self.creeDictValeurs(self.mc_liste, condition=0)
+ dico = self.creeDictValeurs(self.mcListe, condition=0)
dico = dict([(k, v) for k, v in list(dico.items()) if v is not None])
return dico
etre correctement détruit par le garbage collector
"""
N_OBJECT.OBJECT.supprime(self)
- for child in self.mc_liste:
+ for child in self.mcListe:
child.supprime()
def __getitem__(self, key):
"""
# on cherche dans les mots cles presents, le mot cle de nom key
# s'il est là on retourne sa valeur (méthode getVal)
- for child in self.mc_liste:
+ for child in self.mcListe:
if child.nom == key:
return child.getValeur()
# Si on n a pas trouve de mot cle present on retourne le defaut
# Si on a toujours rien trouve, on cherche dans les blocs presents
# On suppose que tous les blocs possibles ont ete crees meme ceux
# induits par un mot cle simple absent avec defaut (???)
- for mc in self.mc_liste:
+ for mc in self.mcListe:
if not mc.isBLOC():
continue
try:
def getChild(self, name, restreint='non'):
"""
Retourne le fils de self de nom name ou None s'il n'existe pas
- Si restreint vaut oui : ne regarde que dans la mc_liste
+ Si restreint vaut oui : ne regarde que dans la mcListe
Si restreint vaut non : regarde aussi dans les entites possibles
avec defaut (Ce dernier cas n'est utilisé que dans le catalogue)
"""
- for v in self.mc_liste:
+ for v in self.mcListe:
if v.nom == name:
return v
if restreint == 'non':
# est acceptee
objet.valeur = copy(self.valeur)
objet.val = copy(self.val)
- objet.mc_liste = []
- for obj in self.mc_liste:
+ objet.mcListe = []
+ for obj in self.mcListe:
new_obj = obj.copy()
new_obj.reparent(objet)
- objet.mc_liste.append(new_obj)
+ objet.mcListe.append(new_obj)
return objet
def reparent(self, parent):
self.parent = parent
self.jdc = parent.getJdcRoot()
self.etape = parent.etape
- for mocle in self.mc_liste:
+ for mocle in self.mcListe:
mocle.reparent(self)
def getSd_utilisees(self):
( comme valorisation d'un MCS)
"""
l = []
- for child in self.mc_liste:
+ for child in self.mcListe:
l.extend(child.getSd_utilisees())
return l
'MODELE': [<Cata.cata.modele instance at 0x941550c>] }
"""
dico = {}
- for child in self.mc_liste:
+ for child in self.mcListe:
daux = child.getSd_mcs_utilisees()
for cle in daux:
dico[cle] = dico.get(cle, [])
instances de la classe CO
"""
l = []
- for child in self.mc_liste:
+ for child in self.mcListe:
l.extend(child.getMcsWithCo(co))
return l
Cette methode retourne tous les concepts instances de CO
"""
l = []
- for child in self.mc_liste:
+ for child in self.mcListe:
l.extend(child.getAllCo())
return l
self.jdc = None
self.niveau = None
self.etape = None
- self.mc_liste = self.build_mc()
+ self.mcListe = self.buildMc()
def GETVAL(self, val):
"""
"""
obj = self.data[0]
# Phase 1 : on cherche dans les fils directs de obj
- for child in obj.mc_liste:
+ for child in obj.mcListe:
if child.nom == name:
return child
# Phase 2 : on cherche dans les blocs de self
- for child in obj.mc_liste:
+ for child in obj.mcListe:
if child.isBLOC():
resu = child.getChild(name)
if resu != None:
"""
dresu = []
for mcf in self:
- dico = mcf.creeDictValeurs(mcf.mc_liste)
+ dico = mcf.creeDictValeurs(mcf.mcListe)
for i in list(dico.keys()):
if dico[i] == None:
del dico[i]
dresu.append(dico)
return dresu
+
+ def longueurDsArbre(self):
+ # pour Pyxb : longueur dans le orderedcontent de pyxb
+ return len(self)
"""
return self
- def isBLOC(self):
- """
- Indique si l'objet est un BLOC
- """
- return 0
def getJdcRoot(self):
"""
self.parent = parent
self.jdc = parent.jdc
+ def isBLOC(self):
+ """
+ Indique si l'objet est un BLOC
+ surcharge dans MCBLOC
+ """
+ return 0
+
+ def longueurDsArbre(self):
+ return 1
+
class ErrorObj(OBJECT):
self.definition = definition
self.valeur = valeur
self.parent = parent
- self.mc_liste = []
+ self.mcListe = []
if parent:
self.jdc = self.parent.jdc
# self.niveau = self.parent.niveau
self.cr.fatal(_(u"Type non autorisé pour le mot-clé %s : '%s'"),
self.nom, self.valeur)
return self.cr
+
+
def validChild(self):
""" Cette methode teste la validite des mots cles de l'etape """
- for child in self.mc_liste:
+ for child in self.mcListe:
if not child.isValid():
return 0
return 1
"""
sd_prod = self.definition.sd_prod
if type(sd_prod) == types.FunctionType: # Type de concept retourne calcule
- d = self.creeDictValeurs(self.mc_liste)
+ d = self.creeDictValeurs(self.mcListe)
try:
sd_prod = sd_prod(*(), **d)
except:
traceback.print_exc()
self.cr.fatal('Command : %s line : %r file : %r %s' % (tr(self.nom), self.appel[0], self.appel[1], e))
i = 0
- for child in self.mc_liste:
+ for child in self.mcListe:
i += 1
if i > MAXSIZE:
- print (MAXSIZE_MSGCHK.format(MAXSIZE, len(self.mc_liste)))
+ print (MAXSIZE_MSGCHK.format(MAXSIZE, len(self.mcListe)))
break
self.cr.add(child.report())
return self.cr
self.typret = None
if type(sd_prod) == types.FunctionType:
# Type de concept retourne calcule
- d = self.creeDictValeurs(self.mc_liste)
+ d = self.creeDictValeurs(self.mcListe)
try:
# la sd_prod d'une macro a l'objet lui meme en premier argument
# contrairement a une ETAPE ou PROC_ETAPE
old_valid = self.valid
else:
old_valid = None
- for child in self.mc_liste:
+ for child in self.mcListe:
if not child.isValid():
valid = 0
break
class MCCOMPO(object):
"""
- L'attribut mc_liste a ete cree par une classe derivee de la
+ L'attribut mcListe a ete cree par une classe derivee de la
classe MCCOMPO du Noyau
"""
self.cr.debut = self.txt_nat + self.nom
self.cr.fin = "END " + self.txt_nat + self.nom
i = 0
- for child in self.mc_liste:
+ for child in self.mcListe:
i += 1
if i > MAXSIZE:
- print(MAXSIZE_MSGCHK.format(MAXSIZE, len(self.mc_liste)))
+ print(MAXSIZE_MSGCHK.format(MAXSIZE, len(self.mcListe)))
break
self.cr.add(child.report())
self.state = 'modified'
def dictMcPresents(self, restreint='non'):
"""
- Retourne le dictionnaire {mocle : objet} construit a partir de self.mc_liste
+ Retourne le dictionnaire {mocle : objet} construit a partir de self.mcListe
Si restreint == 'non' : on ajoute tous les mots-cles simples du catalogue qui ont
une valeur par defaut
Si restreint == 'oui' : on ne prend que les mots-cles effectivement entres par
dico = {}
# on ajoute les couples {nom mot-cle:objet mot-cle} effectivement
# presents
- for v in self.mc_liste:
+ for v in self.mcListe:
if v == None:
continue
k = v.nom
old_valid = self.valid
else:
old_valid = None
- for child in self.mc_liste:
+ for child in self.mcListe:
if not child.isValid():
valid = 0
break
\r
\r
#---------------------------------\r
-Equation = PROC (nom="Equation",\r
+DataBase = PROC (nom="DataBase",\r
op=None,\r
#---------------------------------\r
Equation_DB=SIMP(statut= 'o',typ= 'TXM', into=("Approved data base", "My data base") ),\r
) # Fin Equation\r
\r
#---------------------------------\r
-Modele = PROC (nom="Modele",\r
+ODE = PROC (nom="ODE",\r
op=None,\r
Modele_DB=SIMP(statut= 'o',typ= 'TXM', into=("Approved data base", "My data base"),siValide=lienDB.recupereDicoModele ),\r
Modele_Type = SIMP(statut= 'o',typ= 'TXM', into=("Show modele database", "Modele creation"),siValide=lienDB.creeListeEquation),\r
Commentaire = SIMP (statut = 'f', typ = 'TXM'),\r
) # Fin Modele\r
#---------------------------------\r
-Posttraitement = PROC (nom="Posttraitement",\r
+AnalyticModel = PROC (nom="AnalyticModel",\r
op=None,\r
posttraitement_DB=SIMP(statut= 'o',typ= 'TXM', into=("Approved data base", "My data base") ),\r
posttraitement_Type = SIMP(statut= 'o',typ= 'TXM', into=("Show post-traitement database", "post-traitement creation"),),\r
catalogues=(
('VP','V1',os.path.join(repIni,'VP_Cata_V2.py'),'python','python'),
)
-nombreDeBoutonParLigne=2
+nombreDeBoutonParLigne=3
closeFrameRechercheCommande = True
closeEntete = True
#closeArbre = True
def tri(self, listeIn):
+ if len(listeIn) == 0 : return listeIn
if len(listeIn) == 1 : return listeIn
if self.Ordre_Des_Commandes == None : return listeIn
listeOut=[listeIn[0],]