Salome HOME
BOUNDARY... dans Telemac2D
[tools/eficas.git] / generator / generator_python.py
index 9bdd1f26f0f5eb3df8de26830478168bf86e402b..b40e6589b7100c98a5849da4699e948ea0e8054b 100644 (file)
     python pour EFICAS.
 
 """
+from __future__ import absolute_import
+try :
+   from builtins import str
+   from builtins import object
+   from builtins import range
+except : pass
+
 import traceback
-import types,string,re
+import types,re
 
 from Noyau import N_CR
 from Noyau.N_utils import repr_float
 import Accas
 import Extensions
 from Extensions.parametre import ITEM_PARAMETRE
-from Formatage import Formatage 
-from Formatage import FormatageLigne
+from .Formatage import Formatage 
+from .Formatage import FormatageLigne
 from Extensions.param2 import Formula
 from Extensions.eficas_exception import EficasException
 from Extensions.i18n import tr
@@ -51,7 +58,7 @@ def entryPoint():
           }
 
 
-class PythonGenerator:
+class PythonGenerator(object):
    """
        Ce generateur parcourt un objet de type JDC et produit
        un fichier au format python 
@@ -94,17 +101,28 @@ class PythonGenerator:
           Si format vaut 'standard', retourne un texte obtenu par concatenation de la liste
           Si format vaut 'beautifie', retourne le meme texte beautifie
       """
+      import logging
       self.appli=obj.get_jdc_root().appli
       #self.appli=obj.appli
-      #print format
       liste= self.generator(obj)
+      #format='standard'
       if format == 'brut':
          self.text=liste
       elif format == 'standard':
-         self.text=string.join(liste)
+         self.text=''.join(liste)
       elif format == 'beautifie':
          jdc_formate = Formatage(liste,mode='.py')
+         #import cProfile, pstats, StringIO
+         #pr = cProfile.Profile()
+         #pr.enable()
          self.text=jdc_formate.formate_jdc()
+         #pr.disable()
+         #s = StringIO.StringIO()
+         #sortby = 'cumulative'
+         #ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
+         #ps.print_stats()
+         #print (s.getvalue())
+
       elif format == 'Ligne':
          jdc_formate = FormatageLigne(liste,mode='.py')
          self.text=jdc_formate.formate_jdc()
@@ -178,9 +196,9 @@ class PythonGenerator:
             l.extend(self.generator(etape_niveau))
       if l != [] :
          # Si au moins une etape, on ajoute le retour chariot sur la derniere etape
-         if type(l[-1])==types.ListType:
+         if type(l[-1])==list:
             l[-1][-1] = l[-1][-1]+'\n'
-         elif type(l[-1])==types.StringType:
+         elif type(l[-1])==bytes:
             l[-1] = l[-1]+'\n'
       return l
 
@@ -202,7 +220,7 @@ class PythonGenerator:
          Cette methode convertit un COMMANDE_COMM
          en une liste de chaines de caracteres a la syntaxe python
       """
-      l_lignes = string.split(obj.valeur,'\n')
+      l_lignes = obj.valeur.split('\n')
       txt=''
       for ligne in l_lignes:
           txt = txt + '##'+ligne+'\n'
@@ -225,7 +243,7 @@ class PythonGenerator:
       # Dans la chaine de caracteres obj.valeur, on supprime le dernier
       # saut de ligne
       sans_saut = re.sub("\n$","",obj.valeur)
-      l_lignes = string.split(sans_saut,'\n')
+      l_lignes = sans_saut.split('\n')
       txt=''
       i=1
       for ligne in l_lignes:
@@ -285,7 +303,7 @@ class PythonGenerator:
       """
       try:
         sdname= self.generator(obj.sd)
-        if  string.find(sdname,'SD_') != -1: sdname='sansnom'
+        if  sdname.find('SD_') != -1: sdname='sansnom'
       except:
         sdname='sansnom'
       l=[]
@@ -337,6 +355,7 @@ class PythonGenerator:
           sdname=''
         else:
           sdname= self.generator(obj.sd)+'='
+        if  sdname.find('SD_') != -1: sdname=''
       except:
         sdname='sansnom='
       l=[]
@@ -381,6 +400,7 @@ class PythonGenerator:
             l.append(mocle)
         elif isinstance(v,Accas.MCSIMP) :
           text=self.generator(v)
+          if text==None : text= ""
           l.append(v.nom+'='+text)
         else:
           # MCFACT ou MCList
@@ -421,6 +441,7 @@ class PythonGenerator:
          else:
            # on est en presence d'un MCSIMP : on recupere une string
            text =self.generator(v)
+           if text== None : text =""
            if v.nom != "Consigne" :  l.append(v.nom+'='+text)
       # il faut etre plus subtil dans l'ajout de la virgule en differenciant 
       # le cas ou elle est obligatoire (si self a des freres cadets 
@@ -470,7 +491,8 @@ class PythonGenerator:
                l.append(mocle)
         else:
           data=self.generator(v)
-          if type(data) == types.ListType:
+          if data==None : data= ""
+          if type(data) == list:
             data[0]=v.nom+'='+data[0]
           else:
             data=v.nom+'='+data
@@ -478,19 +500,20 @@ class PythonGenerator:
       return l
 
 
-   def format_item(self,valeur,etape,obj):
-      if (type(valeur) == types.FloatType or 'R' in obj.definition.type) and not(isinstance(valeur,Accas.PARAMETRE)) :
-         # Pour un flottant on utilise str
+   def format_item(self,valeur,etape,obj,vientDeListe=0):
+      if (type(valeur) == float or 'R' in obj.definition.type) and not(isinstance(valeur,Accas.PARAMETRE)) :
+         # Pour un flottant on utilise str ou repr si on vient d une liste
          # ou la notation scientifique
          # On ajoute un . si il n y en a pas dans la valeur
          s = str(valeur)
+         if vientDeListe and repr(valeur) != str(valeur) : s=repr(valeur)
          if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) : s=s+'.0'
          clefobj=etape.get_sdname()
-         if self.appli.appliEficas and self.appli.appliEficas.dict_reels.has_key(clefobj):
-           if self.appli.appliEficas.dict_reels[clefobj].has_key(valeur):
+         if self.appli.appliEficas and clefobj in self.appli.appliEficas.dict_reels:
+           if valeur in self.appli.appliEficas.dict_reels[clefobj]:
              s=self.appli.appliEficas.dict_reels[clefobj][valeur]
          
-      elif type(valeur) == types.StringType :
+      elif type(valeur) == bytes :
          if valeur.find('\n') == -1:
             # pas de retour chariot, on utilise repr
             s = repr(valeur)
@@ -516,7 +539,6 @@ class PythonGenerator:
             # mais seulement le nom dans le cas d'un parametre
       #      s = valeur.nom
       #   else:
-      #      print valeur
       #      s = self.generator(valeur)
 
       else :
@@ -530,7 +552,7 @@ class PythonGenerator:
           syntaxe python
       """
       waitTuple=0
-      if type(obj.valeur) in (types.TupleType,types.ListType) :
+      if type(obj.valeur) in (tuple,list) :
          s = ''
          for ss_type in obj.definition.type:
           if repr(ss_type).find('Tuple') != -1 :
@@ -545,11 +567,14 @@ class PythonGenerator:
          else :
             obj.valeurFormatee=[]
             for val in obj.valeur :
-               s =s +self.format_item(val,obj.etape,obj) + ','
-               obj.valeurFormatee.append(self.format_item(val,obj.etape,obj))
-            if len(obj.valeur) > 1:
+               s =s +self.format_item(val,obj.etape,obj,1) + ','
+               if obj.wait_TXM() :
+                  obj.valeurFormatee.append(val)
+               else :
+                 obj.valeurFormatee.append(self.format_item(val,obj.etape,obj))
+            if len(obj.valeur) >= 1:
                s = '(' + s + '),'
-            if obj.valeur==[] : s="(),"
+            if obj.valeur==[] or obj.valeur==() : s="(),"
          if obj.nbrColonnes() :
             s=self.formatColonnes(obj.nbrColonnes(),obj.valeur,obj)
       else :
@@ -560,7 +585,6 @@ class PythonGenerator:
 
    def formatColonnes(self,nbrColonnes,listeValeurs,obj):
       #try :
-      print listeValeurs
       if 1 == 1 :
         indice=0
         textformat="("
@@ -583,5 +607,4 @@ class PythonGenerator:
       #except :
       else :
          textformat=str(obj.valeur)
-      print textformat
       return textformat