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
}
-class PythonGenerator:
+class PythonGenerator(object):
"""
Ce generateur parcourt un objet de type JDC et produit
un fichier au format python
fp.write(self.text)
fp.close()
- def gener(self,obj,format='brut',config=None):
+ def gener(self,obj,format='brut',config=None,appli=None):
"""
Retourne une representation du JDC obj sous une
forme qui est parametree par format.
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()
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
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'
# 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:
"""
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=[]
sdname=''
else:
sdname= self.generator(obj.sd)+'='
+ if sdname.find('SD_') != -1: sdname=''
except:
sdname='sansnom='
l=[]
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
else:
# on est en presence d'un MCSIMP : on recupere une string
text =self.generator(v)
- l.append(v.nom+'='+text)
+ 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
# dans self.parent) ou non
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
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)
# mais seulement le nom dans le cas d'un parametre
# s = valeur.nom
# else:
- # print valeur
# s = self.generator(valeur)
else :
Convertit un objet MCSIMP en une liste de chaines de caracteres a la
syntaxe python
"""
- if obj.isInformation() : return ""
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 :
break
if waitTuple :
- s = str(obj.valeur) +','
- obj.valeurFormatee=obj.valeur
+ #s = str(obj.valeur) +','
+ #obj.valeurFormatee=obj.valeur
+ s = obj.GetText() +','
+ obj.valeurFormatee=obj.GetText()
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 :
def formatColonnes(self,nbrColonnes,listeValeurs,obj):
#try :
- print listeValeurs
if 1 == 1 :
indice=0
textformat="("
#except :
else :
textformat=str(obj.valeur)
- print textformat
return textformat