From: Eric Fayolle Date: Tue, 6 Sep 2022 15:48:05 +0000 (+0200) Subject: Amélioration de l'option de sauvegarde des fichiers incertains X-Git-Tag: merge_uncertainty_odysee_1210~20 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=84fd20bfb3f37cbd3cb34128f8047081928c8a36;p=tools%2Feficas.git Amélioration de l'option de sauvegarde des fichiers incertains --- diff --git a/InterfaceQT4/editorSsIhm.py b/InterfaceQT4/editorSsIhm.py index 102a7321..d4c823cc 100755 --- a/InterfaceQT4/editorSsIhm.py +++ b/InterfaceQT4/editorSsIhm.py @@ -585,6 +585,9 @@ class JDCEditorSsIhm : 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 # --------------------------------------------- diff --git a/ReacteurNumerique/essaiMCAccasCML.py b/ReacteurNumerique/essaiMCAccasCML.py deleted file mode 100755 index a6987e0f..00000000 --- a/ReacteurNumerique/essaiMCAccasCML.py +++ /dev/null @@ -1,746 +0,0 @@ -#!/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 = ' 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/essaiMCAccasXML.py b/ReacteurNumerique/essaiMCAccasXML.py deleted file mode 100755 index ceca2134..00000000 --- a/ReacteurNumerique/essaiMCAccasXML.py +++ /dev/null @@ -1,755 +0,0 @@ -#!/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/generator/generator_UQ.py b/generator/generator_UQ.py index 39ae154a..c3b9d9a9 100644 --- a/generator/generator_UQ.py +++ b/generator/generator_UQ.py @@ -83,7 +83,9 @@ class UQGenerator(PythonGenerator): 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 @@ -150,9 +152,9 @@ class UQGenerator(PythonGenerator): # 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) : diff --git a/generator/textePersalys.py b/generator/textePersalys.py index 5a1e49d8..01c639e2 100644 --- a/generator/textePersalys.py +++ b/generator/textePersalys.py @@ -10,7 +10,10 @@ headerScriptPersalys = """#! /usr/bin/env python3 # 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 @@ -39,20 +42,20 @@ import persalys 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) @@ -62,11 +65,11 @@ class Study: #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: @@ -79,7 +82,7 @@ class Study: def prepare_case(self): from incertainty_tools import replace_data - print('--------------------------------------- 3 ---------------------------------------') + #print('--------------------------------------- 3 ---------------------------------------') import shutil if not os.path.isdir(self.workdir): @@ -105,7 +108,7 @@ class Study: #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) @@ -113,7 +116,7 @@ class Study: 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) @@ -136,7 +139,7 @@ fonctionPersalys = """ def _exec({chaineDesVariablesInput}): from post_csv_rn import vInitialTime, vHalfTime, vFinalTime, vMean, vSum, vMin, vMax - print('--------------------------------------- 00 ---------------------------------------') + #print('--------------------------------------- 00 ---------------------------------------') from {currentFile} import Study @@ -261,6 +264,7 @@ advancedParameterMC = { } #TODO: Demander à Liana cf:eficas +#TODO: Associer les noms de variables au résultat resultMC=""" result = centralTendency.getResult() {optionalResult}