return 1, fichier
ret = self.generator.writeUQ(fichier)
if not ret : self.informe('Sauvegarde UQ', self.generator.commentaire)
+ else:
+ self.informe('Sauvegarde UQ', 'Sauvegardes des fichiers .comm, _UQ.comm effectuées.\n'\
+ 'Création des fichiers _UQ.py et _UQBalise.comm.',critique=False)
return ret, fichier
# ---------------------------------------------
+++ /dev/null
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-import sys,os
-import inspect
-import traceback
-def trace():
- 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
-except : pass
-
-from Accas import A_ASSD
-
-class X_OBJECT:
-# -------------
-
- 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
-
-
-class X_MCSIMP(X_OBJECT):
-# -----------------------
-
- def buildObjPyxb(self, debug=True) :
- 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.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 self.waitMatrice() :
- #PNPN : Attention rien ne relie les objets listeObjPyxb a un objAccas
- # 27/04 je ne sais pas si cela posera pb
- self.listeLines = []
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- self.maClasseModeleMetier_line=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_line')
- if debug : print ('Matrice de type ', self.maClasseModeleMetier)
- for v in self.valeur:
- l=self.maClasseModeleMetier_line(v)
- self.listeLines.append(l)
- self.objPyxb=self.maClasseModeleMetier(*self.listeLines)
- if self.objPyxb !=None : self.objPyxb.objAccas=self
- if debug : print ('Matrice ', self.nom, self.objPyxb)
- if debug : print (self.objPyxb.toDOM(element_name='RN_EDG').toprettyxml())
- return
- if self.waitTuple() :
- self.objPyxb = []
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- # if faut traiter l autre cas
- # et optimiser
- if self.definition.max !=1 :
- for v in self.valeur :
- if debug : print ('je traite ', v)
- listeConstruction=[]
- for i in range(self.combienEltDsTuple()):
- num=i+1
- maClasseElt=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_n'+str(num)+'_tuple')
- listeConstruction.append(maClasseElt(v[i]))
- self.objPyxb.append(self.maClasseModeleMetier(*listeConstruction))
- # on fait porter au 1er l objet Accas pour retrouver la definition
- if self.objPyxb[0] !=None : self.objPyxb[0].objAccas=self
- if debug : print (self.objPyxb)
- if debug : print (self.objPyxb[0].__class__)
- if debug :
- for o in self.objPyxb : print ('x_MSIMP', o.toDOM(element_name='RN_EDG').toprettyxml())
- return
- if self.waitChaineAvecBlancs() and self.definition.max > 1:
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- if debug : print (self.valeur)
- if self.valeur != None and self.valeur != [] : self.objPyxb = self.maClasseModeleMetier(*self.valeur)
- else :self.objPyxb = self.maClasseModeleMetier()
- 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)
- return
-
-
- 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 :
- # PNPN A corriger
- # self.objPyxb=self.maClasseModeleMetier(self.valeur)
- self.objPyxb=self.maClasseModeleMetierFactory(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
- 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)
- deepDebug=False
- self.listArg=[]
- self.dicoArg={}
- for objAccas in mc_list :
- if debug : print ('dans le for', objAccas.nom)
- 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
- if debug : print ('ds X_MCCOMPO de ', self.nom + ' pour ', objAccas.nom, objAccas.objPyxb)
- 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 debug : print (self.listArg)
- if debug : print (self.maClasseModeleMetier)
- # self.objPyxb=self.maClasseModeleMetier(*self.listArg)
- self.objPyxb=self.maClasseModeleMetier(**self.dicoArg)
- deepDebug=False
- if deepDebug :
- print ('debut de __________ 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 __________ new content')
- print ('debut de __________ listArg')
- for obj in self.listArg:
- print ('obj',obj)
- print ('type obj', type(obj))
- print ('id(obj)', id(obj))
- print ('fin __________ listArg')
-
- newOrderedContent=[]
- for obj in self.listArg:
- if isinstance(obj, list):
- # traitement particulier des tuples
- print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii')
- if hasattr(obj[0],'objAccas') and obj[0].objAccas.nature == 'MCSIMP' and obj[0].objAccas.waitTuple():
- print (self.dicoArg)
- badObjPyxb=self.maClasseModeleMetier(**self.dicoArg)
- for newObj in obj :
- print (newObj)
- print ('jjjjjjjjjjjjjjjjjjjjjjjjj')
- badObjPyxb.append(newObj)
- for c in badObjPyxb.orderedContent() :
- if hasattr (c,'value') and c.value == newObj : newOrderedContent.append(c)
- continue
-
- for c in self.objPyxb.orderedContent() :
- if hasattr (c,'value') and c.value == obj :
- newOrderedContent.append(c)
- continue
- 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)
-
- if debug : print ('construction X_MCCOMPO', self, self.nom, self.objPyxb)
- i=0
-
- #for i in range(len(self.listArg)):
- # a priori on a a len(newOrderedContent) > len(orderedContent())
- for i in range(len(newOrderedContent)):
- self.objPyxb.orderedContent()[i]=newOrderedContent[i]
-
- if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb)
- if debug : print ('X_MCCOMPO', self.objPyxb.orderedContent())
- deepDebug=True
- if deepDebug :
- for obj in self.objPyxb.orderedContent() :
- print (obj.value)
- try :
- for objFils in obj.value.orderedContent():
- print (objFils.value)
- except : pass
- if debug : print ('x_MCCOMPO', self.objPyxb.toDOM(element_name='RN_EDG').toprettyxml())
- if debug : print ('X_MCCOMPO', self.objPyxb.orderedContent())
- 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)
- if debug : print ('ajout dans exploreBLOC ', self.nom + ' de fact ', fils.nom, 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 ('ajout dans exploreBLOC ', self.nom + ' de ', fils.nom, fils.objPyxb)
- #if debug : print ('ds exploreBLOC de ', self.nom + ' pour ', fils.nom, fils.objPyxb)
- #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 --------------------------')
-
-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 --------------------------')
-
-
-class X_MCFACT (X_MCCOMPO):
-# -------------------------
- 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
-
-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.ALWAYS)
- pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
- pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
-
-
-
- def enregistreEtapePyxb(self,etape,indice=0, debug=False):
- # ne fonctionne pas : a reecrire avec les fonctions addObjPyxb et ReconstruitPerePyxb
- # ne contient pas indice pour l insant
-
- if debug : print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh')
- if debug : print ('enregistre ds ',self, etape.nom, 'indice = ', indice)
- if etape.nature == 'COMMENTAIRE' : return
- if not self.cata.modeleMetier : return
- if debug : print ('etape.objPyxb', etape.objPyxb)
- if debug : print (etape.objPyxb.toDOM(element_name='RN_EDG').toprettyxml())
- 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())
- #ns1 = pyxb.namespace.Namespace("xsi:schemaLocation")
- #monUri='http://chercheurs.edf.com/logiciels/{} {}'.format(self.code,os.path.basename(self.cata.fileModeleMetier))
- #print ('monUri', monUri)
- #pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, monUri)
-
- ns1 = pyxb.namespace.NamespaceForURI("http://www.w3.org/2001/XMLSchema-instance",True)
- pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, 'xsi')
- texteXML = self.objPyxb.toDOM().toprettyxml()
- if debug : print (texteXML)
- if debug : print ('__________________________________________________________________________')
- #enteteXML = '<ns1:{} xmlns:ns1="http://chercheurs.edf.com/logiciels/{}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://chercheurs.edf.com/logiciels/{} file:{}>'.format(self.code,self.code,self.code,self.cata.fileModeleMetier)
- return (self.objPyxb.toDOM().toprettyxml())
-
-
- def analyseFromXML(self,debug=False):
- if debug : 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
- if not hasattr(self.cata.modeleMetier,'AccasUserAssdMultiple'):
- from Accas import UserASSDMultiple
- self.cata.modeleMetier.AccasUserAssdMultiple=UserASSDMultiple
- 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
- if objAAnalyser is None: return
- #if (objAAnalyser.__class__.__name__.find('BU_map')>0) : debug=True
- #if (objAAnalyser.__class__.__name__.find('n1')>0) : debug=True
- #if debug : print ('debut pour_____________________________ ',objAAnalyser, objAAnalyser.__class__.__name__)
- dictArgs = {}
- # traitement SIMP
- # ---------------
- # a revoir pour les matrices
- # et les tuples
- if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
- if debug : print ('je suis un MCSimple', objAAnalyser)
- # traitement scalaire
- objAAnalyser.dictPyxb=objAAnalyser
- if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)):
- if debug : print ('je suis un scalaire')
- #if (objAAnalyser.__class__.__name__.find('n1')>0) :
- #if (isinstance(objAAnalyser,self.cata.modeleMetier.AccasTuple)): return objAAnalyser
- if isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssd) or isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssdMultiple):
- laClassePyxbUserAssd=type(objAAnalyser)
- return self.creeUserAssd(objAAnalyser,laClassePyxbUserAssd)
- if issubclass(objAAnalyser.__class__,self.cata.modeleMetier.AccasAssd): return (self.g_context[str(objAAnalyser)])
- 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)
- return objAAnalyser
- else :
- if debug : print ('je suis une liste')
- laListe=[]
-
- # liste homogene
- #if len(objAAnalyser)>0:
- # if issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssdMultiple): estUnUserASSDorUserASSDMultiple = True
- # else : estUnUserASSDorUserASSDMultiple=False
- # print (objAAnalyser[0].__class__,objAAnalyser, estUnUserASSDorUserASSDMultiple)
- #else : estUnUserASSDorUserASSDMultiple=False
- #if debug : print ('estUnUserASSDorUserASSDMultiple', estUnUserASSDorUserASSDMultiple)
-
- for obj in objAAnalyser :
- if issubclass(obj.__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(obj.__class__,self.cata.modeleMetier.AccasUserAssdMultiple):
- laClassePyxbUserAssd=obj.__class__
- laListe.append(self.creeUserAssd(obj,laClassePyxbUserAssd))
- elif issubclass(obj.__class__,self.cata.modeleMetier.AccasAssd):
- laListe.append(self.g_context[str(obj)])
- elif 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])
-
- if debug : print ("***********************************")
- if debug : print ('pyxbToDict fin pour ********** ', objAAnalyser)
- if debug : print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
- if debug : print ('pyxbToDict fin pour ********** ', objAAnalyser)
- if debug : print ("***********************************")
- # traitement des Matrices et des Tuples
- # on change ce qu on retourne pour ne garder que la valeur de la matrice
- if hasattr(objAAnalyser,'sdType') and objAAnalyser.sdType == 'Matrice': return dictArgs['line']
- # on estime que les elements du tuple sont nommes par ordre 1..., n
- # ou par ordre alpha
- if hasattr(objAAnalyser,'sdType') and objAAnalyser.sdType == 'Tuple':
- liste=[]
- listeKeys = list(dictArgs.keys())
- listeKeys.sort()
- for k in listeKeys : liste.append(dictArgs[k])
- return tuple(liste)
- if debug : print ('fin pour ',objAAnalyser)
- return dictArgs
-
- def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd,debug=False):
-
- enCreation=False
- if debug : print ('creeUserAssd ', objAAnalyser, ' ',laClassePyxbUserAssd)
- leTypeIntermediaire=laClassePyxbUserAssd.XsdSuperType()
- if debug : print ('leTypeIntermediaire ', leTypeIntermediaire)
- if debug : print ('leTypeIntermediaire ', leTypeIntermediaire.XsdSuperType())
- if leTypeIntermediaire.__name__[-2:]== '_C' : enCreation = True
- elif leTypeIntermediaire.__name__[-2:] != '_U' : print ('pb avec', laClassePyxbUserAssd); return None #exit()
- nomClasseAccasUserAssd=leTypeIntermediaire.XsdSuperType().__name__
- if debug : print ('nomClasseAccasUserAssd', nomClasseAccasUserAssd)
- laClasseAccas=getattr(self.cata,nomClasseAccasUserAssd)
- print (laClasseAccas)
- 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 :
- 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
-
-# def analyseContent(self,objAAnalyser):
-# objAAnalyser.dictArgs={}
-# for objContenu in objAAnalyser.content():
-# #print ('j analyse ', objContenu)
-# objContenu.monNomClasseModeleMetier=str(objContenu.__class__).split('.')[-1]
-# objContenu.monNomClasseAccas=objContenu.monNomClasseModeleMetier[2:-2]
-# #maClasseAccas=classeAccasPere.entites[objContenu.monNomClasseAccas]
-# if objContenu._IsSimpleTypeContent():
-# print (objContenu.monNomClasseAccas,objContenu.pythonLiteral())
-# print (objContenu.monNomClasseAccas,objContenu.xsdLiteral())
-# #chaine=objContenu.pythonLiteral().split('(')[1].split(')')[0]
-# print (dir(objContenu))
-# objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=None
-# #objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.pythonLiteral()
-# 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 ( '________________')
-
-
-
-if __name__ == "__main__":
- print ('a faire')
+++ /dev/null
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2021 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-import sys,os
-import inspect
-import traceback
-def trace():
- 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
-except : pass
-
-from Accas import A_ASSD
-
-class X_OBJECT:
-# -------------
-
- 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
-
-
-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
- 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 self.waitMatrice() :
- #PNPN : Attention rien ne relie les objets listeObjPyxb a un objAccas
- # 27/04 je ne sais pas si cela posera pb
- self.listeLines = []
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- self.maClasseModeleMetier_line=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_line')
- if debug : print ('Matrice de type ', self.maClasseModeleMetier)
- for v in self.valeur:
- l=self.maClasseModeleMetier_line(v)
- self.listeLines.append(l)
- self.objPyxb=self.maClasseModeleMetier(*self.listeLines)
- if self.objPyxb !=None : self.objPyxb.objAccas=self
- if debug : print ('Matrice ', self.nom, self.objPyxb)
- if debug : print (self.objPyxb.toDOM(element_name='RN_EDG').toprettyxml())
- return
- if self.waitTuple() :
- self.objPyxb = []
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- # if faut traiter l autre cas
- # et optimiser
- if self.definition.max !=1 :
- for v in self.valeur :
- if debug : print ('je traite ', v)
- listeConstruction=[]
- for i in range(self.combienEltDsTuple()):
- num=i+1
- maClasseElt=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_n'+str(num)+'_tuple')
- listeConstruction.append(maClasseElt(v[i]))
- self.objPyxb.append(self.maClasseModeleMetier(*listeConstruction))
- # on fait porter au 1er l objet Accas pour retrouver la definition
- if self.objPyxb[0] !=None : self.objPyxb[0].objAccas=self
- if debug : print (self.objPyxb)
- if debug : print (self.objPyxb[0].__class__)
- if debug :
- for o in self.objPyxb : print ('x_MSIMP', o.toDOM(element_name='RN_EDG').toprettyxml())
- return
- if self.waitChaineAvecBlancs() and self.definition.max > 1:
- self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
- if debug : print (self.valeur)
- if self.valeur != None and self.valeur != [] : self.objPyxb = self.maClasseModeleMetier(*self.valeur)
- else :self.objPyxb = self.maClasseModeleMetier()
- 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)
- return
-
-
- 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 :
- # PNPN A corriger
- # self.objPyxb=self.maClasseModeleMetier(self.valeur)
- self.objPyxb=self.maClasseModeleMetierFactory(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 :
- # les dict ont une entree objEnPyxb
- if type(self.objPyxb) is list or type(self.objPyxb) is tuple :
- porteObjet=self.objPyxb[0]
- while (type(porteObjet) is list or type(porteObjet) is tuple) : porteObjet=porteObjet[0]
- if type(porteObjet) is dict: porteObjet=porteObjet['objEnPyxb']
- porteObjet.objAccas=self
- elif type(self.objPyxb) is dict:
- porteObjet = self.objPyxb['objEnPyxb']
- porteObjet.objAccas=self
- else : 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
- if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
-
-
-
-
-class X_MCCOMPO(X_OBJECT) :
-# -------------------------
-#
- def buildObjPyxb(self,mc_list, debug=False) :
- if not self.cata or not self.cata.modeleMetier : return
-
- deepDebug=False
- if debug : print ('****************** X_MCCOMPO------------------------', self.nom)
- if self.nom == 'Model_data' : debug=True
- if self.nom == 'Model_data' : deepDebug=True
- self.listArg=[]
- self.dicoArg={}
- for objAccas in mc_list :
- if debug : print ('dans le for', objAccas.nom)
- 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
- if debug : print ('ds X_MCCOMPO de ', self.nom + ' pour ', objAccas.nom, objAccas.objPyxb)
- 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 debug : print (self.listArg)
- if debug : print (self.maClasseModeleMetier)
- # self.objPyxb=self.maClasseModeleMetier(*self.listArg)
- self.objPyxb=self.maClasseModeleMetier(**self.dicoArg)
- if deepDebug :
- print ('debut de __________ 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')
- print ('debut de __________ listArg')
- for obj in self.listArg:
- print ('obj',obj)
- print ('type obj', type(obj))
- print ('id(obj)', id(obj))
- print ('fin __________ listArg')
-
- newOrderedContent=[]
- for obj in self.listArg:
- if isinstance(obj, list):
- # traitement particulier des tuples
- if hasattr(obj[0],'objAccas') and obj[0].objAccas.nature == 'MCSIMP' and obj[0].objAccas.waitTuple():
- badObjPyxb=self.maClasseModeleMetier(**self.dicoArg)
- for c in badObjPyxb.orderedContent() :
- if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(obj[0])): newOrderedContent.append(c)
- print ('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu',c)
- continue
-
- #for c in self.objPyxb.orderedContent() :
- # if hasattr (c,'value') and c.value == obj :
- # newOrderedContent.append(c)
- #continue
- 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)
-
- if debug : print ('construction X_MCCOMPO', self, self.nom, self.objPyxb)
- i=0
-
- # a priori on a a len(newOrderedContent) > len(orderedContent())
- #
- if debug : print ('X_MCCOMPO newOrderedContent',len(newOrderedContent))
- if debug : print ('X_MCCOMPO oderedContent',len(self.objPyxb.orderedContent()))
-
- for i in range(len(newOrderedContent)):
- self.objPyxb.orderedContent()[i]=newOrderedContent[i]
-
- if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb)
- if debug : print ('X_MCCOMPO', self.objPyxb.orderedContent())
- if deepDebug :
- for obj in self.objPyxb.orderedContent() :
- print ('----------------- obj ', obj)
- print (obj.value)
- try :
- for objFils in obj.value.orderedContent():
- print (objFils.value)
- except : pass
- if debug : print ('X_MCCOMPO', self.objPyxb.orderedContent())
- if debug : print ('x_MCCOMPO', self.objPyxb.toDOM(element_name='RN_EDG').toprettyxml())
- 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)
- if debug : print ('ajout dans exploreBLOC ', self.nom + ' de fact ', fils.nom, 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 ('ajout dans exploreBLOC ', self.nom + ' de ', fils.nom, fils.objPyxb)
- #if debug : print ('ds exploreBLOC de ', self.nom + ' pour ', fils.nom, fils.objPyxb)
- #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 --------------------------')
-
-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 --------------------------')
-
-
-class X_MCFACT (X_MCCOMPO):
-# -------------------------
- 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
-
-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, debug=False):
- # ne fonctionne pas : a reecrire avec les fonctions addObjPyxb et ReconstruitPerePyxb
- # ne contient pas indice pour l insant
-
- if debug : print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh')
- if debug : print ('enregistre ds ',self, etape.nom, 'indice = ', indice)
- if etape.nature == 'COMMENTAIRE' : return
- if not self.cata.modeleMetier : return
- if debug : print ('etape.objPyxb', etape.objPyxb)
- if debug : print (etape.objPyxb.toDOM(element_name='RN_EDG').toprettyxml())
- 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())
- #ns1 = pyxb.namespace.Namespace("xsi:schemaLocation")
- #monUri='http://chercheurs.edf.com/logiciels/{} {}'.format(self.code,os.path.basename(self.cata.fileModeleMetier))
- #print ('monUri', monUri)
- #pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, monUri)
-
- ns1 = pyxb.namespace.NamespaceForURI("http://www.w3.org/2001/XMLSchema-instance",True)
- pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, 'xsi')
- texteXML = self.objPyxb.toDOM().toprettyxml()
- if debug : print (texteXML)
- if debug : print ('__________________________________________________________________________')
- #enteteXML = '<ns1:{} xmlns:ns1="http://chercheurs.edf.com/logiciels/{}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://chercheurs.edf.com/logiciels/{} file:{}>'.format(self.code,self.code,self.code,self.cata.fileModeleMetier)
- return (self.objPyxb.toDOM().toprettyxml())
-
-
- def analyseFromXML(self,debug=False):
- if debug : 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
- if not hasattr(self.cata.modeleMetier,'AccasUserAssdMultiple'):
- from Accas import UserASSDMultiple
- self.cata.modeleMetier.AccasUserAssdMultiple=UserASSDMultiple
- 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
- if objAAnalyser is None: return
- #if (objAAnalyser.__class__.__name__.find('BU_map')>0) : debug=True
- #if (objAAnalyser.__class__.__name__.find('n1')>0) : debug=True
- #if debug : print ('debut pour_____________________________ ',objAAnalyser, objAAnalyser.__class__.__name__)
- dictArgs = {}
- # traitement SIMP
- # ---------------
- # a revoir pour les matrices
- # et les tuples
- if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
- if debug : print ('je suis un MCSimple', objAAnalyser)
- # traitement scalaire
- objAAnalyser.dictPyxb=objAAnalyser
- if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)):
- if debug : print ('je suis un scalaire')
- #if (objAAnalyser.__class__.__name__.find('n1')>0) :
- #if (isinstance(objAAnalyser,self.cata.modeleMetier.AccasTuple)): return objAAnalyser
- if isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssd) or isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssdMultiple):
- laClassePyxbUserAssd=type(objAAnalyser)
- return self.creeUserAssd(objAAnalyser,laClassePyxbUserAssd)
- if issubclass(objAAnalyser.__class__,self.cata.modeleMetier.AccasAssd): return (self.g_context[str(objAAnalyser)])
- 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)
- return objAAnalyser
- else :
- if debug : print ('je suis une liste')
- laListe=[]
-
- # liste homogene
- #if len(objAAnalyser)>0:
- # if issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssdMultiple): estUnUserASSDorUserASSDMultiple = True
- # else : estUnUserASSDorUserASSDMultiple=False
- # print (objAAnalyser[0].__class__,objAAnalyser, estUnUserASSDorUserASSDMultiple)
- #else : estUnUserASSDorUserASSDMultiple=False
- #if debug : print ('estUnUserASSDorUserASSDMultiple', estUnUserASSDorUserASSDMultiple)
-
- for obj in objAAnalyser :
- if issubclass(obj.__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(obj.__class__,self.cata.modeleMetier.AccasUserAssdMultiple):
- laClassePyxbUserAssd=obj.__class__
- laListe.append(self.creeUserAssd(obj,laClassePyxbUserAssd))
- elif issubclass(obj.__class__,self.cata.modeleMetier.AccasAssd):
- laListe.append(self.g_context[str(obj)])
- elif 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])
-
- if debug : print ("***********************************")
- if debug : print ('pyxbToDict fin pour ********** ', objAAnalyser)
- if debug : print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
- if debug : print ('pyxbToDict fin pour ********** ', objAAnalyser)
- if debug : print ("***********************************")
- # traitement des Matrices et des Tuples
- # on change ce qu on retourne pour ne garder que la valeur de la matrice
- if hasattr(objAAnalyser,'sdType') and objAAnalyser.sdType == 'Matrice': return dictArgs['line']
- # on estime que les elements du tuple sont nommes par ordre 1..., n
- # ou par ordre alpha
- if hasattr(objAAnalyser,'sdType') and objAAnalyser.sdType == 'Tuple':
- liste=[]
- listeKeys = list(dictArgs.keys())
- listeKeys.sort()
- for k in listeKeys : liste.append(dictArgs[k])
- return tuple(liste)
- if debug : print ('fin pour ',objAAnalyser)
- return dictArgs
-
- def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd,debug=False):
-
- enCreation=False
- if debug : print ('creeUserAssd ', objAAnalyser, ' ',laClassePyxbUserAssd)
- leTypeIntermediaire=laClassePyxbUserAssd.XsdSuperType()
- if debug : print ('leTypeIntermediaire ', leTypeIntermediaire)
- if debug : print ('leTypeIntermediaire ', leTypeIntermediaire.XsdSuperType())
- if leTypeIntermediaire.__name__[-2:]== '_C' : enCreation = True
- elif leTypeIntermediaire.__name__[-2:] != '_U' : print ('pb avec', laClassePyxbUserAssd); return None #exit()
- nomClasseAccasUserAssd=leTypeIntermediaire.XsdSuperType().__name__
- if debug : print ('nomClasseAccasUserAssd', nomClasseAccasUserAssd)
- laClasseAccas=getattr(self.cata,nomClasseAccasUserAssd)
- print (laClasseAccas)
- 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 :
- 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
-
-# def analyseContent(self,objAAnalyser):
-# objAAnalyser.dictArgs={}
-# for objContenu in objAAnalyser.content():
-# #print ('j analyse ', objContenu)
-# objContenu.monNomClasseModeleMetier=str(objContenu.__class__).split('.')[-1]
-# objContenu.monNomClasseAccas=objContenu.monNomClasseModeleMetier[2:-2]
-# #maClasseAccas=classeAccasPere.entites[objContenu.monNomClasseAccas]
-# if objContenu._IsSimpleTypeContent():
-# print (objContenu.monNomClasseAccas,objContenu.pythonLiteral())
-# print (objContenu.monNomClasseAccas,objContenu.xsdLiteral())
-# #chaine=objContenu.pythonLiteral().split('(')[1].split(')')[0]
-# print (dir(objContenu))
-# objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=None
-# #objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.pythonLiteral()
-# 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 ( '________________')
-
-
-
-if __name__ == "__main__":
- print ('a faire')
self.commentaire=commentaire
return ret
self.inGenerUQ=True
+ self.forceGenerUQ=True
self.textUQ=PythonGenerator.gener(self,jdc,format)
+ self.forceGenerUQ=False
self.inGenerUQ=False
self.text=PythonGenerator.gener(self,jdc,format)
return self.text
# a refaire si on decide que les incertains sont sous des fact multiples
# ce qui ne me parait pas possible mais ?
if obj.etape.nature == 'OPERATEUR' :
- return '@ '+obj.etape.sd.nom +'__' + obj.nom+' @'
+ return '@ '+obj.etape.sd.nom +'__' + obj.nom+' @,'
else :
- return '@ '+obj.nom+' @'
+ return '@ '+obj.nom+' @,'
def analyseIncertitude(self) :
# Script Eficas genere pour lancement Etude Probabiliste
# ---------------------------------------------------------------------------
# Exemple d'utilisation standalone avec salome :
-# salome start -k -t python3 mon_fichier_uq_genere.py
+# ~/salome/appli_V9_7_0_package/salome start -k -t python3 mon_fichier_uq_genere.py
+# ou
+# ~/salome/appli_V9_7_0_package/salome start -k -t
+# ~/salome/appli_V9_7_0_package/salome shell python3 mon_fichier_uq_genere.py
# Chargement du module systeme
import sys
etudeScript = """
class Study:
import os
- print('dir() 0 : ', dir())
+ #print('dir() 0 : ', dir())
import subprocess
- print('dir() 0b : ', dir())
+ #print('dir() 0b : ', dir())
# from incertainty_tools import value_repr_name, replace_data, format_data
def __init__(self, {chaineDesVariablesInput}):
- print('--------------------------------------- 0 ---------------------------------------')
+ ##print('--------------------------------------- 0 ---------------------------------------')
{chaineInitDesVariablesInput}
def do_sh(self, command, execdir=os.getcwd()):
- print('dir() 1 : ', dir())
+ #print('dir() 1 : ', dir())
print('execdir 1 : ', execdir)
import subprocess
- print('dir() 2 : ', dir())
+ #print('dir() 2 : ', dir())
sh = subprocess.Popen(command, shell=True, cwd=execdir,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
#TODO : Définir un décorateur pour sélectionner la fonction voulue
def define_workdirectory(self):
from incertainty_tools import value_repr_name
- print('--------------------------------------- 1 ---------------------------------------')
+ #print('--------------------------------------- 1 ---------------------------------------')
self.workdir = value_repr_name([{chaineSelfDesVariablesInput}])
def case_exists(self):
- print('--------------------------------------- 2 ---------------------------------------')
+ #print('--------------------------------------- 2 ---------------------------------------')
ok = True
if os.path.isdir(self.workdir):
try:
def prepare_case(self):
from incertainty_tools import replace_data
- print('--------------------------------------- 3 ---------------------------------------')
+ #print('--------------------------------------- 3 ---------------------------------------')
import shutil
if not os.path.isdir(self.workdir):
#Fonctions a implementer dans un fichier post_csv pour définir
#comment l'aggrégation des valeurs peut se faire
from post_csv_rn import vInitialTime, vHalfTime, vFinalTime, vMean, vSum, vMin, vMax
- print('--------------------------------------- 4 ---------------------------------------')
+ #print('--------------------------------------- 4 ---------------------------------------')
savdir=os.getcwd()
os.chdir(self.workdir)
results = get_result_from_csv(postProcessedVar, aggregationFctList)
return results
def run_case(self):
- print('--------------------------------------- 5 ---------------------------------------')
+ #print('--------------------------------------- 5 ---------------------------------------')
#os.chdir(self.workdir)
# Si lancement mpi externe à ib_test.sh il faut utiliser self.nproc : mpiexec -n self.nproc ib_test.sh
o,e,c = self.do_sh(command="ib_test.sh", execdir=self.workdir)
def _exec({chaineDesVariablesInput}):
from post_csv_rn import vInitialTime, vHalfTime, vFinalTime, vMean, vSum, vMin, vMax
- print('--------------------------------------- 00 ---------------------------------------')
+ #print('--------------------------------------- 00 ---------------------------------------')
from {currentFile} import Study
}
#TODO: Demander à Liana cf:eficas
+#TODO: Associer les noms de variables au résultat
resultMC="""
result = centralTendency.getResult()
{optionalResult}