]> SALOME platform Git repositories - tools/eficas.git/blob - convert/convert_pyth.py
Salome HOME
30f3b28a330082f77ca2fbd9979d7787206d98aa
[tools/eficas.git] / convert / convert_pyth.py
1 """
2     Ce module contient le plugin convertisseur de fichier
3     au format python pour EFICAS.
4
5     Un plugin convertisseur doit fournir deux attributs de classe :
6     extensions et formats et deux méthodes : readfile,convert.
7
8     L'attribut de classe extensions est une liste d'extensions
9     de fichiers préconisées pour ce type de format. Cette information
10     est seulement indicative.
11
12     L'attribut de classe formats est une liste de formats de sortie
13     supportés par le convertisseur. Les formats possibles sont :
14     eval, dict ou exec.
15     Le format eval est un texte source Python qui peut etre evalué. Le
16     résultat de l'évaluation est un objet Python quelconque.
17     Le format dict est un dictionnaire Python.
18     Le format exec est un texte source Python qui peut etre executé. 
19
20     La méthode readfile a pour fonction de lire un fichier dont le
21     nom est passé en argument de la fonction.
22        convertisseur.readfile(nom_fichier)
23
24     La méthode convert a pour fonction de convertir le fichier
25     préalablement lu dans un objet du format passé en argument.
26        objet=convertisseur.convert(outformat)
27
28     Ce convertisseur supporte le format de sortie dict
29
30 """
31 import sys,string,traceback
32
33 from Noyau import N_CR
34
35 def entryPoint():
36    """
37        Retourne les informations nécessaires pour le chargeur de plugins
38        Ces informations sont retournées dans un dictionnaire
39    """
40    return {
41         # Le nom du plugin
42           'name' : 'pyth',
43         # La factory pour créer une instance du plugin
44           'factory' : PythParser,
45           }
46
47
48 class PythParser:
49    """
50        Ce convertisseur lit un fichier au format pyth avec la 
51        methode readfile : convertisseur.readfile(nom_fichier)
52        et retourne le texte au format outformat avec la 
53        methode convertisseur.convert(outformat)
54
55        Ses caractéristiques principales sont exposées dans 2 attributs 
56        de classe :
57
58        - extensions : qui donne une liste d'extensions de fichier préconisées
59
60        - formats : qui donne une liste de formats de sortie supportés
61    """
62    # Les extensions de fichier préconisées
63    extensions=('.pyth',)
64    # Les formats de sortie supportés (eval dict ou exec)
65    formats=('dict',)
66
67    def __init__(self,cr=None):
68       # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
69       if cr :
70          self.cr=cr
71       else:
72          self.cr=N_CR.CR(debut='CR convertisseur format pyth',
73                          fin='fin CR format pyth')
74       self.g={}
75
76    def readfile(self,filename):
77       self.filename=filename
78       try:
79          self.text=open(filename).read()
80       except:
81          self.cr.fatal("Impossible ouvrir fichier %s",filename)
82          return
83       self.g={}
84       try:
85          exec self.text in self.g
86       except Exception,e:
87          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
88          s= string.join(l[2:])
89          s= string.replace(s,'"<string>"','"<%s>"'%self.filename)
90          self.cr.fatal("Erreur a l'evaluation :\n" + s)
91
92    def convert(self,outformat):
93       if outformat == 'dict':
94          return self.getdict()
95       else:
96          raise "Format de sortie : %s, non supporté"
97
98    def getdict(self):
99       d={}
100       for k,v in self.g.items():
101          if k[0] != '_':d[k]=v
102       return d
103