From cfdfef4f9905457039806c8d38bc620e21f7739c Mon Sep 17 00:00:00 2001 From: PASCALE NOYRET Date: Thu, 24 Mar 2022 15:36:20 +0100 Subject: [PATCH] fin projetction cataRN avant passage des tests Accas--> XSD --- Editeur/session.py | 4 +-- Efi2Xsd/AccasXsd.py | 24 ++++++++++---- Efi2Xsd/MCAccasXML.py | 57 ++++++++++++++++++++------------ Efi2Xsd/balisesXSD.py | 6 ++-- InterfaceQT4/editor.py | 6 ++-- InterfaceQT4/editorSsIhm.py | 14 ++++---- InterfaceQT4/monWidgetMatrice.py | 1 + Validation/V_MCSIMP.py | 3 +- 8 files changed, 72 insertions(+), 43 deletions(-) diff --git a/Editeur/session.py b/Editeur/session.py index 2fd87c62..7a415370 100644 --- a/Editeur/session.py +++ b/Editeur/session.py @@ -264,7 +264,7 @@ def createparser(): parser.add_option(u"-c","--cata", action="store", type="string",dest="fichierCata", help=tr("catalogue a utiliser")) - parser.add_option(u"-o","--fichierXMLOut", action="store", type="string",dest="fichierXMLOut", + parser.add_option(u"-o","--fichierOut", action="store", type="string",dest="fichierOut", help=tr("nom du fichier xml genere")) parser.add_option(u"-v","--label", action="store", type="string",dest="labelCode", @@ -302,7 +302,7 @@ def parse(args): options.comm=[] if not hasattr(options,"fichierCata"): options.fichierCata=None if not hasattr(options,"labelCode"): options.labelCode=None - if not hasattr(options,"fichierXMLOut"): options.fichierXMLOut=None + if not hasattr(options,"fichierOut"): options.fichierOut=None if options.withXSD : try : import pyxb except : print ('Please, source pyxb environment'); exit() diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index bfc0fe6b..c85ea6e3 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -411,7 +411,7 @@ class X_compoFactoriseAmbigu(X_definition): def ajouteAuxTextes(self,nomMC,indent,debug=False) : - if nomMC == 'radial_meshing' : debug =True + #if nomMC == 'radial_meshing' : debug =True if debug : print ('______________________________________________________') print ('ajouteAuxTextes', nomMC, self.nom) @@ -564,7 +564,7 @@ class X_compoFactoriseAmbigu(X_definition): # print (self.texteSimple) # print ('______________') - def fusionneDsUnChoix(self, nomMC,indent, debug=True): + def fusionneDsUnChoix(self, nomMC,indent, debug=False): if debug : print ('______fusionneDsUnChoix ', self.nom, self, nomMC,indent) if debug : print (self.texteComplexe) texteDocUnion='\n' @@ -633,6 +633,7 @@ class X_compoFactoriseAmbigu(X_definition): if debug : #print ('fusionneDesMatricesDeMemeType self.texteSimple avant', self.texteSimple) print ('fusionneDesMatricesDeMemeType self.texteComplexe avant', self.texteComplexe) +# if self.texteSimple += debutSimpleType.format(elt.nomDuTypePyxb+'_element') self.texteSimple += debutRestrictionBase.format(elt.nomDuTypeDeBase) if typeDeMatrice.typEltInto != None: @@ -671,7 +672,6 @@ class X_definitionComposee (X_definition): #for nom in self.ordre_mc: # mcFils = self.entites[nom] if debug : print ('___________________ creeTexteComplexeVenantDesFils', self.nom) - if self.nom == 'LeProc' : debug = True for mcFils in self.mcXSD : if debug : print (mcFils,mcFils.nom) else : debug=False @@ -1218,6 +1218,7 @@ class X_SIMP (X_definition): def dumpSpecifiqueMatrice(self,minOccurs): + # ajouter le AccasAssd # if faut traiter le defaut typeDeMatrice =self.type[0] @@ -1247,14 +1248,17 @@ class X_SIMP (X_definition): # il faut ajouter les regles # il faut gerer les types tuple et fichier # on ne paut pas tester le type qui depend du cataloge + if self.nom == "assembly_list" : debug=True if hasattr(self.type[0], 'typElt') : + if debug : print ( self.nom , 'est une matrice') self.suisUneMatrice = True - # on presume que le type de l elt est un ASSDi si il n est pas un type connu - if self.type[0].typElt not in dictNomsDesTypes.keys(): return 'xs:string' + # on presume que le type de l elt est un ASSD si il n est pas un type connu + if self.type[0].typElt not in dictNomsDesTypes.keys(): return 'AccasAssd' return dictNomsDesTypes[self.type[0].typElt] else : self.suisUneMatrice = False if hasattr(self.type[0], 'ntuple') : + if debug : print ( self.nom , 'est un tuple') self.suisUnTuple = True # Pour l instant pas de into dans les tuples non homogenes et pas de reference # sinon, il faudra faire un for sur la suite avec les createObjet @@ -1265,7 +1269,7 @@ class X_SIMP (X_definition): # a Reprendre typeATraduire = self.validators.typeDesTuples[i] if not (typeATraduire in list(dictNomsDesTypes.keys())) : - enRetour.append('xs:string') + enRetour.append('AccasAssd') else : enRetour.append(dictNomsDesTypes[self.validators.typeDesTuples[i]]) return enRetour @@ -1275,7 +1279,9 @@ class X_SIMP (X_definition): typeATraduire=self.type[0] if not (typeATraduire in list(dictNomsDesTypes.keys())) : #if (isinstance(typeATraduire, Accas.ASSD) or issubclass(typeATraduire, Accas.ASSD)) : + if debug : print ( self.nom , 'n est pas un type de base') if (not(isinstance(typeATraduire,str)) and issubclass(typeATraduire, Accas.ASSD)) : + if debug : print ( self.nom , 'est d un type sous classe de ASSD') # cas d une creation cata = CONTEXT.getCurrentCata() # PNPNPN a Revoir pour la creation des keyrefs @@ -1285,6 +1291,7 @@ class X_SIMP (X_definition): else : cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__].append(self) if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_C' + if issubclass(typeATraduire, Accas.ASSD) : return 'AccasAssd' else : return 'xs:string' # cas d une consommation @@ -1293,6 +1300,7 @@ class X_SIMP (X_definition): else : cata.dictTypesASSDorUserASSDUtilises[typeATraduire].append(self,) if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_U' + if issubclass(typeATraduire, Accas.ASSD) : return 'AccasAssd' else : return 'xs:string' else : return ('YYYYY') return dictNomsDesTypes[typeATraduire] @@ -1337,7 +1345,7 @@ class X_SIMP (X_definition): class X_JDC_CATA : #----------------- - def dumpXsd(self, avecEltAbstrait, debug = True): + def dumpXsd(self, avecEltAbstrait, avecSubstitution=True, debug = True): cata = CONTEXT.getCurrentCata() if debug : print ('avecEltAbstrait -------------------', avecEltAbstrait) if debug : print ('self.importedBy -------------------', self.importedBy) @@ -1390,6 +1398,8 @@ class X_JDC_CATA : else : self.texteXSD = texteDebut.format(self.code,self.code,self.code,self.code,self.code,self.code) + + self.texteXSD += defBaseXSDASSD self.texteXSD += self.texteSimple self.texteXSD += self.texteComplexe diff --git a/Efi2Xsd/MCAccasXML.py b/Efi2Xsd/MCAccasXML.py index a2aea67e..02bf2e81 100755 --- a/Efi2Xsd/MCAccasXML.py +++ b/Efi2Xsd/MCAccasXML.py @@ -511,7 +511,7 @@ class X_JDC (X_MCCOMPO): #print ('monUri', monUri) #pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, monUri) - ns1 = pyxb.namespace.Namespace("http://www.w3.org/2001/XMLSchema-instance") + 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) @@ -527,6 +527,9 @@ class X_JDC (X_MCCOMPO): 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)) @@ -552,26 +555,29 @@ class X_JDC (X_MCCOMPO): if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh') - def pyxbToDict(self,objAAnalyser, debug=True): + 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 debug : print ('debut pour_____________________________ ',objAAnalyser) + #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 - debug = 1 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): - if debug : print ('je suis un UserASSD') 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) @@ -581,16 +587,21 @@ class X_JDC (X_MCCOMPO): 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 - else : estUnUserASSDorUserASSDMultiple=False - if debug : print ('estUnUserASSDorUserASSDMultiple', estUnUserASSDorUserASSDMultiple) + #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 estUnUserASSDorUserASSDMultiple: + 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)) @@ -627,18 +638,22 @@ class X_JDC (X_MCCOMPO): # print ('ajout dans dictPyxb', objPyxbName, objPyxbValue.dictPyxb) #print ('avec la valeur', 'de', objAAnalyser.dictPyxb[objPyxbName]) - #print ("***********************************") - #print ('pyxbToDict fin pour ********** ', objAAnalyser) - #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb) - #print ('pyxbToDict fin pour ********** ', objAAnalyser) - #print ("***********************************") - #print (dictArgs) - #print (dictPyxb) - #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i])) - #print ('fin pour ',objAAnalyser) + 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'] + if hasattr(objAAnalyser,'sdType') and objAAnalyser.sdType == 'Tuple': + liste=[] + for (k,v) in dictArgs.items(): liste.append(v) + return liste + if debug : print ('fin pour ',objAAnalyser) return dictArgs - def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd,debug=True): + def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd,debug=False): enCreation=False if debug : print ('creeUserAssd ', objAAnalyser, ' ',laClassePyxbUserAssd) diff --git a/Efi2Xsd/balisesXSD.py b/Efi2Xsd/balisesXSD.py index 64d2c9a6..32bd8779 100644 --- a/Efi2Xsd/balisesXSD.py +++ b/Efi2Xsd/balisesXSD.py @@ -3,6 +3,7 @@ texteDebutNiveau2='\n\n\n' texteFin='' + #texteAnnotation= '\t\n\t\t\n\t\t{}\n\t\t\n\t\t\n\t\n\t\n' texteAnnotation= '\t\n\t\t\n\t\t{}\n\t\t\n\t\t\n\t\n\t\n' @@ -81,6 +82,7 @@ attributeTypeForASSD = '\t\t\n' producingASSDkeyRefDeclaration='\t\n\t\t\n\t\t\n\t\n' texteFieldUnitaire="./{}:{}/@name |" +defBaseXSDASSD = '\t\n\t\t\n\t\t\n\t\n' defBaseXSDUserASSD='\t\n\t\t\n\t\t\n\t\n' defBaseXSDUserASSDMultiple='\t\n\t\t\n\t\t\n\t\n' @@ -127,13 +129,13 @@ tupleNonHomogeneSimpleType = '\t\n\t\t