]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
lecture des UserASSDs
authorpascale.noyret <pascale.noyret@edf.fr>
Fri, 21 May 2021 13:19:53 +0000 (15:19 +0200)
committerpascale.noyret <pascale.noyret@edf.fr>
Fri, 21 May 2021 13:19:53 +0000 (15:19 +0200)
Efi2Xsd/MCAccasXML.py

index 548c24d4c228c60068b08b20ab51e0807723e0a9..23149b1f4b4fba788ab81c61478cb18e291e557b 100755 (executable)
@@ -525,42 +525,46 @@ class X_JDC (X_MCCOMPO):
             if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
 
 
-    def pyxbToDict(self,objAAnalyser, debug=False):
+    def pyxbToDict(self,objAAnalyser, debug=True):
         # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
-        # faudrait - il travailler sur les types des objets ?
-        # c est a revoir -> fonction cast a prevoir ds les 2 sens
         if objAAnalyser is None: return
         if debug : print ('debut pour_____________________________ ',objAAnalyser)
         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')
+            if debug : print ('je suis un MCSimple', objAAnalyser)
             # traitement scalaire
             objAAnalyser.dictPyxb=objAAnalyser
             if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)):
-            # print ('je suis un scalaire')
-            #try :  # python 3
-                if isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssd):
-                    import inspect
-                    laClassePyxbUserAssd=inspect.getmro(objAAnalyser.__class__)[1]
+                if debug :  print ('je suis un scalaire')
+                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 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)
-                #except : # python 2
-                #if isinstance(objAAnalyser, types.StringTypes):  return str(objAAnalyser)
-                #if isinstance(objAAnalyser, types.FloatType):  return float(objAAnalyser)
-                #if isinstance(objAAnalyser, (types.IntType, types.LongType)):  return int(objAAnalyser)
-                #print ('________ fin pour ', objAAnalyser, 'retour', repr(objAAnalyser))
                 return objAAnalyser
             else :
-                #print ('je suis une liste')
+                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)
                 for obj in objAAnalyser :
-                    if isinstance(obj, str): laListe.append (str(obj))
+                    if estUnUserASSDorUserASSDMultiple:
+                       laClassePyxbUserAssd=obj.__class__
+                       laListe.append(self.creeUserAssd(obj,laClassePyxbUserAssd))
+                    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))
@@ -607,13 +611,19 @@ class X_JDC (X_MCCOMPO):
         #print ('fin pour ',objAAnalyser)
         return dictArgs
 
-    def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd):
+    def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd,debug=True):
 
-        nomClasseAccasUserAssd=laClassePyxbUserAssd.__name__[:-2]
         enCreation=False
-        if laClassePyxbUserAssd.__name__[-2:]== '_C' : enCreation = True
-        elif laClassePyxbUserAssd.__name__[-2:] != '_U' : print ('pb avec', laClassePyxbUserAssd); exit()
+        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 :