]> SALOME platform Git repositories - tools/eficas.git/blob - generator/generator_ini.py
Salome HOME
*** empty log message ***
[tools/eficas.git] / generator / generator_ini.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 """
22     Ce module contient le plugin generateur de fichier
23     au format ini pour EFICAS.
24
25
26 """
27 import traceback
28 import types,string
29
30 from Noyau import N_CR
31 from Accas import MCSIMP,MCFACT,MCList
32
33 def entryPoint():
34    """
35        Retourne les informations nécessaires pour le chargeur de plugins
36        Ces informations sont retournées dans un dictionnaire
37    """
38    return {
39         # Le nom du plugin
40           'name' : 'ini',
41         # La factory pour créer une instance du plugin
42           'factory' : IniGenerator,
43           }
44
45
46 class IniGenerator:
47    """
48        Ce generateur parcourt un objet de type MCFACT et produit
49        un fichier au format ini 
50        L'acquisition et le parcours sont réalisés par le méthode
51        generator.gener(objet_mcfact)
52        L'écriture du fichier au format ini par appel de la méthode
53        generator.writefile(nom_fichier)
54
55        Ses caractéristiques principales sont exposées dans des attributs 
56        de classe :
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,config=None):
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       if isinstance(obj,MCList):
87         if len(obj.data) > 1:
88           raise "Pas supporté"
89         else:
90           obj=obj.data[0]
91
92       for mocle in obj.mc_liste:
93         if isinstance(mocle,MCList):
94           if len(mocle.data) > 1:
95             raise "Pas supporté"
96           else:
97             liste_mcfact.append(self.generMCFACT(mocle.data[0]))
98         elif isinstance(mocle,MCFACT):
99           liste_mcfact.append(self.generMCFACT(mocle))
100         elif isinstance(mocle,MCSIMP):
101           sect_defaut=sect_defaut+self.generMCSIMP(mocle)
102         else:
103           self.cr.fatal("Entite inconnue ou interdite : "+`mocle`)
104
105       self.text=''
106       if sect_defaut != '':
107          self.text="[DEFAULT]\n"+sect_defaut
108       self.text=self.text + string.join(liste_mcfact,'\n')
109       return self.text
110
111    def generMCFACT(self,obj):
112       """
113          Cette méthode convertit un mot-clé facteur ne contenant que des mots-clés
114          simples en une chaine de caractères
115       """
116       sect_text='[%s]\n' % obj.nom
117       for mocle in obj.mc_liste:
118          if isinstance(mocle,MCSIMP):
119             sect_text=sect_text+self.generMCSIMP(mocle)
120          else:
121             self.cr.fatal("Entite inconnue ou interdite : "+`mocle`+" Elle est ignorée")
122       return sect_text
123
124    def generMCSIMP(self,obj):
125       """
126          Cette méthode convertit un mot-clé simple en une chaine de caractères
127          au format ini
128       """
129       s=''
130       if type(obj.valeur) == types.TupleType :
131          self.cr.fatal("Les tuples ne sont pas supportés pour le format ini : "+ obj.nom)
132          s="%s = %s\n" % (obj.nom,"ERREUR")
133       else :
134          try:
135             s="%s = %s\n" % (obj.nom,obj.valeur)
136          except Exception,e :
137             self.cr.fatal("Type de valeur non supporté par le format ini : "+ obj.nom + '\n'+str(e))
138             s="%s = %s\n" % (obj.nom,"ERREUR")
139       return s
140