From: PASCALE NOYRET Date: Tue, 12 Jul 2022 12:53:23 +0000 (+0200) Subject: chgt AccasXML et petit comm mettant le bug en exergue X-Git-Tag: merge_uncertainty_odysee_1210~37 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=107a00d3bc577924bbe2be5f8f1a4b97fd6a9b69;p=tools%2Feficas.git chgt AccasXML et petit comm mettant le bug en exergue --- diff --git a/ReacteurNumerique/essaiMCAccasXML.py b/ReacteurNumerique/essaiMCAccasXML.py new file mode 100755 index 00000000..ceca2134 --- /dev/null +++ b/ReacteurNumerique/essaiMCAccasXML.py @@ -0,0 +1,755 @@ +#!/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 = ' 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') diff --git a/ReacteurNumerique/md.comm b/ReacteurNumerique/md.comm new file mode 100644 index 00000000..51b13549 --- /dev/null +++ b/ReacteurNumerique/md.comm @@ -0,0 +1,12 @@ +thermo_model=Model_data(physics='Thermalhydraulics', + scale='component', + code='THYC', + thyc_options=_F(n_threads=23,), + radial_meshing=_F(fluid='subdivision', + fluid_subdivision=1, + pellet=8, + clad=2,), + axial_meshing=_F(lower_refl=1, + fuel=40, + upper_refl=1,),); +