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