Salome HOME
Version initiale de EFICAS 1.2
[tools/eficas.git] / convert / convert_ini.py
1 """
2     Ce module contient le plugin convertisseur de fichier
3     au format ini pour EFICAS.
4     Le convertisseur supporte le format de sortie eval
5
6     Le format eval est un texte Python qui peut etre 
7     evalué avec la commande eval de Python. Il doit donc 
8     etre une expression Python dont l'évaluation permet d'obtenir un objet
9
10 """
11 import traceback
12
13 from ConfigParser import ConfigParser
14 from Noyau import N_CR
15
16 def entryPoint():
17    """
18        Retourne les informations nécessaires pour le chargeur de plugins
19        Ces informations sont retournées dans un dictionnaire
20    """
21    return {
22         # Le nom du plugin
23           'name' : 'ini',
24         # La factory pour créer une instance du plugin
25           'factory' : IniParser,
26           }
27
28
29 class IniParser(ConfigParser):
30    """
31        Ce convertisseur lit un fichier au format ini avec la 
32        methode readfile : convertisseur.readfile(nom_fichier)
33        et retourne le texte au format outformat avec la 
34        methode convertisseur.convert(outformat)
35
36        Ses caractéristiques principales sont exposées dans 2 attributs 
37        de classe :
38
39        - extensions : qui donne une liste d'extensions de fichier préconisées
40
41        - formats : qui donne une liste de formats de sortie supportés
42    """
43    # Les extensions de fichier préconisées
44    extensions=('.ini','.conf')
45    # Les formats de sortie supportés (eval ou exec)
46    formats=('eval','dict')
47
48    def __init__(self,cr=None):
49       ConfigParser.__init__(self)
50       # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
51       if cr :
52          self.cr=cr
53       else:
54          self.cr=N_CR.CR(debut='CR convertisseur format ini',
55                          fin='fin CR format ini')
56
57    def readfile(self,filename):
58       try:
59          self.read(filename)
60       except Exception,e:
61          self.cr.fatal(str(e))
62
63    def convert(self,outformat):
64       if outformat == 'eval':
65          return self.getdicttext()
66       elif outformat == 'dict':
67          return self.getdict()
68       else:
69          raise "Format de sortie : %s, non supporté"
70
71    def getdicttext(self):
72       s='{'
73       for section in self.sections():
74          s=s+ "'" + section + "' : {"
75          options=self.options(section)
76          for option in options:
77             value=self.get(section,option)
78             if value == '':value="None"
79             s=s+"'%s' : %s," % (option, value)
80          s=s+"}, "
81       s=s+"}"
82       return s
83
84    def getdict(self):
85       s={}
86       for section in self.sections():
87          s[section]=d={}
88          options=self.options(section)
89          for option in options:
90             value=self.get(section,option)
91             if value == '':
92                d[option]=None
93             else:
94                d[option]=eval(value)
95       return s
96