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