Salome HOME
Version Aster 6.3.14
[tools/eficas.git] / Editeur / configuration.py
1 """
2     Ce module sert pour charger les paramètres de configuration d'EFICAS
3 """
4 # Modules Python
5 import os,sys,string,types
6 import traceback
7 try:
8   from tkMessageBox import showinfo,askyesno,showerror,askretrycancel
9 except:
10   pass
11
12 # Modules Eficas
13 import utils
14
15 class CONFIG:
16   def __init__(self,appli,rep_ini):
17       # si appli == None on est en mode commande (hors EFICAS)
18       self.appli = appli  
19       if self.appli:self.parent=appli.top
20       else:self.parent=None
21       self.rep_ini = rep_ini
22       self.rep_user = utils.get_rep_user()
23       self.lecture_parametres()
24
25   def lecture_parametres(self):
26       """
27          Cette méthode teste l'existence du fichier editeur.ini au bon endroit et lance
28          son interprétation
29       """
30       fic_ini = os.path.join(self.rep_ini,'editeur.ini')
31       if not os.path.exists(fic_ini) or not os.path.isfile(fic_ini):
32         if self.appli :
33           showerror("Erreur","Impossible de trouver le fichier %s ! \n Prévenez la maintenance ..." %fic_ini)
34         else:
35           print "Impossible de trouver le fichier %s ! \n Prévenez la maintenance ..." %fic_ini
36         sys.exit(0)
37       self.fic_ini = fic_ini
38       self.init_liste_param()
39       self.lecture_fichier_ini_standard()
40       self.lecture_fichier_ini_utilisateur()
41
42   def lecture_fichier_ini_standard(self):
43       """
44       Relit les paramètres du fichier eficas.ini
45       """
46       txt = utils.read_file(self.fic_ini)
47       d={}
48       try:
49          exec txt in d
50       except:
51          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
52          showerror("Erreur","Une erreur s'est produite dans la relecture du fichier de configuration : "
53                        + self.fic_ini+"\n"+string.join(l[2:]))
54          print "Erreur à la lecture du fichier de configuration : %s" % self.fic_ini 
55          print string.join(l[2:])
56          sys.exit()
57       for attr in self.l_nom_param:
58           nom_attr,statut = attr
59           valeur = d.get(nom_attr,None)
60           if not valeur and statut=='o':
61               showerror("Erreur","Une erreur s'est produite dans la relecture du fichier de configuration : "
62                        + self.fic_ini+"\n EFICAS va vous demander les nouveaux paramètres")
63               return
64           setattr(self,nom_attr,valeur)
65       self.init_liste_param()
66
67   def lecture_fichier_ini_utilisateur(self):
68       """
69       Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
70       """
71       self.fic_ini_utilisateur = os.path.join(self.rep_user,'eficas.ini')
72       if not os.path.isfile(self.fic_ini_utilisateur):
73           # pas de fichier de configuration utilisateur --> on passe
74           return
75       txt = utils.read_file(self.fic_ini_utilisateur)
76       d={}
77       try:
78           exec txt in d
79       except :
80           showinfo("Erreur","Impossible d'interpréter le fichier de configuration utilisateur : %s" %self.fic_ini_utilisateur)
81           traceback.print_exc()
82           return
83       for attr in self.l_nom_param:
84           nom_attr,statut = attr
85           valeur = d.get(nom_attr,None)
86           if valeur :
87               setattr(self,nom_attr,valeur)
88       self.init_liste_param()
89
90   def init_liste_param(self):
91       """
92       Génère la liste des paramètres
93       l_param est une liste de tuples où chaque tuple est de la forme :
94       (label,nature,nom_var,defaut)
95       """
96       self.l_param=[]
97       # répertoire de travail
98       if hasattr(self,'rep_travail'):
99           self.l_param.append(("Répertoire de travail",'rep','rep_travail',self.rep_travail))
100       else:
101           self.l_param.append(("Répertoire de travail",'rep','rep_travail',
102                                os.path.join(self.rep_user,'uaster','tmp_eficas')))
103       # répertoire des catalogues matériaux
104       if hasattr(self,'rep_mat'):
105           self.l_param.append(("Répertoire materiaux",'rep','rep_mat',self.rep_mat))
106       else:
107           self.l_param.append(("Répertoire materiaux",'rep','rep_mat','/aster/v4/materiau'))
108       # chemin d'accès exécutable acrobat reader
109       if hasattr(self,'exec_acrobat'):
110           self.l_param.append(("Ligne de commande Acrobat Reader",'file','exec_acrobat',self.exec_acrobat))
111       else:
112           self.l_param.append(("Ligne de commande Acrobat Reader",'file','exec_acrobat',self.rep_user))
113       # répertoire contenant la doc Aster
114       if hasattr(self,'path_doc'):
115           self.l_param.append(("Chemin d'accès à la doc Aster",'rep','path_doc',self.path_doc))
116       else:
117           self.l_param.append(("Chemin d'accès à la doc Aster",'rep','path_doc',self.rep_user))
118       # chemin(s) d'accès au(x) catalogue(s)
119       if hasattr(self,'catalogues'):
120           self.l_param.append(("Versions du code ",'cata','catalogues',self.catalogues))
121       else:
122           self.l_param.append(("Versions du code ",'cata','catalogues',os.path.join(self.rep_ini,'..','Cata/cata.py')))
123       # attribut développeur
124       if hasattr(self,'isdeveloppeur'):
125           self.l_param.append(("Etes-vous développeur ?",'YesNo','isdeveloppeur',self.isdeveloppeur))
126       else:
127           self.l_param.append(("Etes-vous développeur ?",'YesNo','isdeveloppeur','NON'))
128       # répertoire où sont contenus les catalogues développeurs
129       if hasattr(self,'path_cata_dev') and hasattr(self,'isdeveloppeur') and self.isdeveloppeur == 'OUI':
130           self.l_param.append(("Chemin d'accès aux catalogues développeurs",'rep','path_cata_dev',self.path_cata_dev))
131       else:
132           self.l_param.append(("Chemin d'accès aux catalogues développeurs",'rep','path_cata_dev',
133                                os.path.join(self.rep_user,'cata')))
134       self.l_param = tuple(self.l_param)
135       self.l_nom_param=[]
136       statut='o'
137       for tup in self.l_param:
138           #self.l_nom_param.append((tup[2],statut))
139           if tup[1] == 'YesNo':
140               # les paramètres suivant tup sont facultatifs ...
141               statut='f'
142           self.l_nom_param.append((tup[2],statut))
143
144   def affichage_fichier_ini(self):
145       """
146       Affichage des valeurs des paramètres relus par Eficas
147       """
148       import widgets
149       result = widgets.Formulaire(self.parent,
150                                   obj_pere = self,
151                                   titre = "Paramètres nécessaires à la configuration d'EFICAS",
152                                   texte = "Voici les paramètres que requiert Eficas",
153                                   items = self.l_param,
154                                   mode='display',
155                                   commande=('Modifier',self.creation_fichier_ini_si_possible))
156       if result.resultat :
157           print 'on sauvegarde les nouveaux paramètres :',result.resultat
158           self.save_param_ini(result.resultat)
159
160   def save_param_ini(self,dico):
161       """
162       Sauvegarde les nouveaux paramètres dans le fichier de configuration utilisateur
163       """
164       f=open(self.fic_ini_utilisateur,'w+')
165       for k,v in dico.items():
166          if k == 'catalogues' :
167             f.write(k + '\t=\t' + str(v) + '\n')
168          else:
169             f.write(k + '\t=\t"' + str(v) + '"\n')
170       f.close()
171       self.lecture_fichier_ini_utilisateur()
172
173   def creation_fichier_ini_si_possible(self):
174       return self.creation_fichier_ini(mode='ignorer_annuler')
175
176   def creation_fichier_ini(self,mode='considerer_annuler'):
177       """
178       Récupération des valeurs des paramétres requis pour la création du fichier
179       eficas.ini
180       """
181       import widgets
182       texte = "EFICAS a besoin de certains renseignements pour se configurer\n"+\
183               "Veuillez remplir TOUS les champs ci-dessous et appuyer sur 'Valider'\n"+\
184               "Si vous annulez, EFICAS ne se lancera pas !!"
185       items = self.l_param
186       result = widgets.Formulaire(self.parent,
187                                   obj_pere = self,
188                                   titre = "Saisie des données indispensables à la configuration d'EFICAS",
189                                   texte = texte,
190                                   items = items,
191                                   mode='query')
192       if not result.resultat :
193           if mode == 'considerer_annuler':
194              test = askretrycancel("Erreur","Données incorrectes !")
195              if not test:
196                  # XXX On sort d'EFICAS, je suppose
197                  self.appli.exitEFICAS()
198              else:
199                  self.creation_fichier_ini()
200           else:
201               return None
202       else :
203           self.save_param_ini(result.resultat)
204           return result.resultat
205
206 def make_config(appli,rep):
207     return CONFIG(appli,rep)
208
209