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