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