]> SALOME platform Git repositories - tools/eficas.git/blob - convert/convert_python.py
Salome HOME
7c58da66544ddf092b10387ebc7879fb6febb611
[tools/eficas.git] / convert / convert_python.py
1 #            CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
8 #
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
13 #
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
17 #
18 #
19 # ======================================================================
20 """
21     Ce module contient le plugin convertisseur de fichier
22     au format python pour EFICAS.
23
24     Un plugin convertisseur doit fournir deux attributs de classe :
25     extensions et formats et deux méthodes : readfile,convert.
26
27     L'attribut de classe extensions est une liste d'extensions
28     de fichiers préconisées pour ce type de format. Cette information
29     est seulement indicative.
30
31     L'attribut de classe formats est une liste de formats de sortie
32     supportés par le convertisseur. Les formats possibles sont :
33     eval, dict ou exec.
34     Le format eval est un texte source Python qui peut etre evalué. Le
35     résultat de l'évaluation est un objet Python quelconque.
36     Le format dict est un dictionnaire Python.
37     Le format exec est un texte source Python qui peut etre executé. 
38
39     La méthode readfile a pour fonction de lire un fichier dont le
40     nom est passé en argument de la fonction.
41        - convertisseur.readfile(nom_fichier)
42
43     La méthode convert a pour fonction de convertir le fichier
44     préalablement lu dans un objet du format passé en argument.
45        - objet=convertisseur.convert(outformat)
46
47     Ce convertisseur supporte le format de sortie exec
48
49 """
50 import sys,string,traceback
51
52 import parseur_python
53 from Noyau import N_CR
54
55 def entryPoint():
56    """
57        Retourne les informations nécessaires pour le chargeur de plugins
58        Ces informations sont retournées dans un dictionnaire
59    """
60    return {
61         # Le nom du plugin
62           'name' : 'python',
63         # La factory pour créer une instance du plugin
64           'factory' : PythonParser,
65           }
66
67
68 class PythonParser:
69    """
70        Ce convertisseur lit un fichier au format python avec la 
71        methode readfile : convertisseur.readfile(nom_fichier)
72        et retourne le texte au format outformat avec la 
73        methode convertisseur.convert(outformat)
74
75        Ses caractéristiques principales sont exposées dans 2 attributs 
76        de classe :
77           - extensions : qui donne une liste d'extensions de fichier préconisées
78           - formats : qui donne une liste de formats de sortie supportés
79    """
80    # Les extensions de fichier préconisées
81    extensions=('.py',)
82    # Les formats de sortie supportés (eval dict ou exec)
83    # Le format exec est du python executable (commande exec) converti avec PARSEUR_PYTHON
84    # Le format execnoparseur est du python executable (commande exec) non converti
85    formats=('exec','execnoparseur')
86
87    def __init__(self,cr=None):
88       # Si l'objet compte-rendu n'est pas fourni, on utilise le 
89       # compte-rendu standard
90       self.text=''
91       if cr :
92          self.cr=cr
93       else:
94          self.cr=N_CR.CR(debut='CR convertisseur format python',
95                          fin='fin CR format python')
96
97    def readfile(self,filename):
98       self.filename=filename
99       try:
100          self.text=open(filename).read()
101       except:
102          self.cr.fatal("Impossible ouvrir fichier %s" % filename)
103          return
104
105    def convert(self,outformat):
106       if outformat == 'exec':
107          try:
108             return parseur_python.PARSEUR_PYTHON(self.text).get_texte()
109          except:
110             # Erreur lors de la conversion
111             l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
112                                          sys.exc_info()[2])
113             self.cr.exception("Impossible de convertir le fichier python \
114                                qui doit contenir des erreurs.\n \
115                                On retourne le fichier non converti \n \
116                                Prévenir la maintenance. \n" + string.join(l))
117             # On retourne néanmoins le source initial non converti (au cas où)
118             return self.text
119       elif outformat == 'execnoparseur':
120          return self.text
121       else:
122          raise "Format de sortie : %s, non supporté"
123          return None
124