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.
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.
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.
19 # ======================================================================
21 Ce module sert pour charger les paramètres de configuration d'EFICAS
24 import os,sys,string,types
27 from tkMessageBox import showinfo,askyesno,showerror,askretrycancel
35 def __init__(self,appli,rep_ini):
36 # si appli == None on est en mode commande (hors EFICAS)
38 if self.appli:self.parent=appli.top
40 self.rep_ini = rep_ini
41 self.rep_user = utils.get_rep_user()
42 self.lecture_parametres()
44 def lecture_parametres(self):
46 Cette méthode teste l'existence du fichier editeur.ini au bon endroit et lance
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):
52 showerror("Erreur","Impossible de trouver le fichier %s ! \n Prévenez la maintenance ..." %fic_ini)
54 print "Impossible de trouver le fichier %s ! \n Prévenez la maintenance ..." %fic_ini
56 self.fic_ini = fic_ini
57 self.init_liste_param()
58 self.lecture_fichier_ini_standard()
59 self.lecture_fichier_ini_utilisateur()
61 def lecture_fichier_ini_standard(self):
63 Relit les paramètres du fichier eficas.ini
65 txt = utils.read_file(self.fic_ini)
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:])
76 for attr in self.l_nom_param:
77 nom_attr,statut,defaut = attr
78 #valeur = d.get(nom_attr,None)
79 valeur = d.get(nom_attr,defaut)
80 if not valeur and statut=='o':
81 showerror("Erreur","Une erreur s'est produite dans la relecture du fichier de configuration : "
82 + self.fic_ini+"\n EFICAS va vous demander les nouveaux paramètres")
84 setattr(self,nom_attr,valeur)
85 self.init_liste_param()
87 def lecture_fichier_ini_utilisateur(self):
89 Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
91 self.fic_ini_utilisateur = os.path.join(self.rep_user,'eficas.ini')
92 if not os.path.isfile(self.fic_ini_utilisateur):
93 # pas de fichier de configuration utilisateur --> on passe
95 txt = utils.read_file(self.fic_ini_utilisateur)
100 showinfo("Erreur","Impossible d'interpréter le fichier de configuration utilisateur : %s" %self.fic_ini_utilisateur)
101 traceback.print_exc()
103 for attr in self.l_nom_param:
104 nom_attr,statut,defaut = attr
105 valeur = d.get(nom_attr,None)
107 setattr(self,nom_attr,valeur)
108 self.init_liste_param()
110 def init_liste_param(self):
112 Génère la liste des paramètres
113 l_param est une liste de tuples où chaque tuple est de la forme :
114 (label,nature,nom_var,defaut)
117 # répertoire initial pour OPEN/SAVE des fichiers de commande
118 # Par defaut, EFICAS utilise le repertoire utilisateur $HOME/Eficas_install
119 # Il est possible de specifier dans editeur.ini ou eficas.ini un autre chemin
120 # Ce peut etre un chemin absolu ou le repertoire courant (os.curdir)
121 if hasattr(self,'initialdir'):
122 self.l_param.append(("Répertoire initial pour Open/save des fichiers de commande",'rep','initialdir',self.initialdir))
124 self.l_param.append(("Répertoire initial pour Open/save des fichiers de commande",'rep','initialdir',self.rep_user))
125 # répertoire de travail
126 if hasattr(self,'rep_travail'):
127 self.l_param.append(("Répertoire de travail",'rep','rep_travail',self.rep_travail))
129 self.l_param.append(("Répertoire de travail",'rep','rep_travail',
130 os.path.join(self.rep_user,'uaster','tmp_eficas')))
131 # répertoire des catalogues matériaux
132 if hasattr(self,'rep_mat'):
133 self.l_param.append(("Répertoire materiaux",'rep','rep_mat',self.rep_mat))
135 self.l_param.append(("Répertoire materiaux",'rep','rep_mat','/aster/v4/materiau'))
136 # chemin d'accès exécutable acrobat reader
137 if hasattr(self,'exec_acrobat'):
138 self.l_param.append(("Ligne de commande Acrobat Reader",'file','exec_acrobat',self.exec_acrobat))
140 self.l_param.append(("Ligne de commande Acrobat Reader",'file','exec_acrobat',self.rep_user))
141 # répertoire contenant la doc Aster
142 if hasattr(self,'path_doc'):
143 self.l_param.append(("Chemin d'accès à la doc Aster",'rep','path_doc',self.path_doc))
145 self.l_param.append(("Chemin d'accès à la doc Aster",'rep','path_doc',self.rep_user))
146 # chemin(s) d'accès au(x) catalogue(s)
147 if hasattr(self,'catalogues'):
148 self.l_param.append(("Versions du code ",'cata','catalogues',self.catalogues))
150 self.l_param.append(("Versions du code ",'cata','catalogues',os.path.join(self.rep_ini,'..','Cata/cata.py')))
151 # attribut développeur
152 if hasattr(self,'isdeveloppeur'):
153 self.l_param.append(("Etes-vous développeur ?",'YesNo','isdeveloppeur',self.isdeveloppeur))
155 self.l_param.append(("Etes-vous développeur ?",'YesNo','isdeveloppeur','NON'))
156 # répertoire où sont contenus les catalogues développeurs
157 if hasattr(self,'path_cata_dev') and hasattr(self,'isdeveloppeur') and self.isdeveloppeur == 'OUI':
158 self.l_param.append(("Chemin d'accès aux catalogues développeurs",'rep','path_cata_dev',self.path_cata_dev))
160 self.l_param.append(("Chemin d'accès aux catalogues développeurs",'rep','path_cata_dev',
161 os.path.join(self.rep_user,'cata')))
162 self.l_param = tuple(self.l_param)
165 for tup in self.l_param:
166 if tup[1] == 'YesNo':
167 # les paramètres suivant tup sont facultatifs ...
169 self.l_nom_param.append((tup[2],statut,tup[3])) # nom,statut,defaut
171 def affichage_fichier_ini(self):
173 Affichage des valeurs des paramètres relus par Eficas
176 result = widgets.Formulaire(self.parent,
178 titre = "Paramètres nécessaires à la configuration d'EFICAS",
179 texte = "Voici les paramètres que requiert Eficas",
180 items = self.l_param,
182 commande=('Modifier',self.creation_fichier_ini_si_possible))
184 print 'on sauvegarde les nouveaux paramètres :',result.resultat
185 self.save_param_ini(result.resultat)
187 def save_param_ini(self,dico):
189 Sauvegarde les nouveaux paramètres dans le fichier de configuration utilisateur
191 f=open(self.fic_ini_utilisateur,'w+')
192 for k,v in dico.items():
193 if k == 'catalogues' :
194 f.write(k + '\t=\t' + str(v) + '\n')
196 f.write(k + '\t=\t"' + str(v) + '"\n')
198 self.lecture_fichier_ini_utilisateur()
200 def creation_fichier_ini_si_possible(self):
201 return self.creation_fichier_ini(mode='ignorer_annuler')
203 def creation_fichier_ini(self,mode='considerer_annuler'):
205 Récupération des valeurs des paramétres requis pour la création du fichier
209 texte = "EFICAS a besoin de certains renseignements pour se configurer\n"+\
210 "Veuillez remplir TOUS les champs ci-dessous et appuyer sur 'Valider'\n"+\
211 "Si vous annulez, EFICAS ne se lancera pas !!"
213 result = widgets.Formulaire(self.parent,
215 titre = "Saisie des données indispensables à la configuration d'EFICAS",
219 if not result.resultat :
220 if mode == 'considerer_annuler':
221 test = askretrycancel("Erreur","Données incorrectes !")
223 # XXX On sort d'EFICAS, je suppose
224 self.appli.exitEFICAS()
226 self.creation_fichier_ini()
230 self.save_param_ini(result.resultat)
231 return result.resultat
233 def make_config(appli,rep):
234 return CONFIG(appli,rep)