]> SALOME platform Git repositories - tools/eficas.git/blob - generator/generator_ini.py
Salome HOME
Version initiale de EFICAS 1.2
[tools/eficas.git] / generator / generator_ini.py
1 """
2     Ce module contient le plugin generateur de fichier
3     au format ini pour EFICAS.
4
5
6 """
7 import traceback
8 import types,string
9
10 from Noyau import N_CR
11 from Accas import MCSIMP,MCFACT
12
13 def entryPoint():
14    """
15        Retourne les informations nécessaires pour le chargeur de plugins
16        Ces informations sont retournées dans un dictionnaire
17    """
18    return {
19         # Le nom du plugin
20           'name' : 'ini',
21         # La factory pour créer une instance du plugin
22           'factory' : IniGenerator,
23           }
24
25
26 class IniGenerator:
27    """
28        Ce generateur parcourt un objet de type MCFACT et produit
29        un fichier au format ini 
30        L'acquisition et le parcours sont réalisés par le méthode
31        generator.gener(objet_mcfact)
32        L'écriture du fichier au format ini par appel de la méthode
33        generator.writefile(nom_fichier)
34
35        Ses caractéristiques principales sont exposées dans des attributs 
36        de classe :
37
38        - extensions : qui donne une liste d'extensions de fichier préconisées
39
40    """
41    # Les extensions de fichier préconisées
42    extensions=('.ini','.conf')
43
44    def __init__(self,cr=None):
45       # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
46       if cr :
47          self.cr=cr
48       else:
49          self.cr=N_CR.CR(debut='CR generateur format ini',
50                          fin='fin CR format ini')
51       # Le texte au format ini est stocké dans l'attribut text
52       self.text=''
53
54    def writefile(self,filename):
55       fp=open(filename,'w')
56       fp.write(self.text)
57       fp.close()
58
59    def gener(self,obj):
60       """
61          Tous les mots-clés simples du niveau haut sont mis dans la section DEFAUT
62          Tous les mots-clés facteurs sont convertis en sections
63          Un mot-clé facteur ne peut contenir que des mots-clés simples. Sinon => erreur
64       """
65       liste_mcfact=[]
66       sect_defaut=''
67       for mocle in obj.mc_liste:
68          if isinstance(mocle,MCFACT):
69             liste_mcfact.append(self.generMCFACT(mocle))
70          elif isinstance(mocle,MCSIMP):
71             sect_defaut=sect_defaut+self.generMCSIMP(mocle)
72          else:
73             self.cr.fatal("Entite inconnue ou interdite : "+`mocle`)
74       self.text=''
75       if sect_defaut != '':
76          self.text="[DEFAULT]\n"+sect_defaut
77       self.text=self.text + string.join(liste_mcfact,'\n')
78       return self.text
79
80    def generMCFACT(self,obj):
81       """
82          Cette méthode convertit un mot-clé facteur ne contenant que des mots-clés
83          simples en une chaine de caractères
84       """
85       sect_text='[%s]\n' % obj.nom
86       for mocle in obj.mc_liste:
87          if isinstance(mocle,MCSIMP):
88             sect_text=sect_text+self.generMCSIMP(mocle)
89          else:
90             self.cr.fatal("Entite inconnue ou interdite : "+`mocle`+" Elle est ignorée")
91       return sect_text
92
93    def generMCSIMP(self,obj):
94       """
95          Cette méthode convertit un mot-clé simple en une chaine de caractères
96          au format ini
97       """
98       s=''
99       if type(obj.valeur) == types.TupleType :
100          self.cr.fatal("Les tuples ne sont pas supportés pour le format ini : "+ obj.nom)
101          s="%s = %s\n" % (obj.nom,"ERREUR")
102       else :
103          try:
104             s="%s = %s\n" % (obj.nom,obj.valeur)
105          except Exception,e :
106             self.cr.fatal("Type de valeur non supporté par le format ini : "+ obj.nom + '\n'+str(e))
107             s="%s = %s\n" % (obj.nom,"ERREUR")
108       return s
109