2 Ce module sert pour charger les paramètres de configuration d'EFICAS
5 import os,sys,string,types
8 from tkMessageBox import showinfo,askyesno,showerror,askretrycancel
16 def __init__(self,appli,rep_ini):
17 # si appli == None on est en mode commande (hors EFICAS)
19 if self.appli:self.parent=appli.top
21 self.rep_ini = rep_ini
22 self.rep_user = utils.get_rep_user()
23 self.lecture_parametres()
25 def lecture_parametres(self):
27 Cette méthode teste l'existence du fichier editeur.ini au bon endroit et lance
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):
33 showerror("Erreur","Impossible de trouver le fichier %s ! \n Prévenez la maintenance ..." %fic_ini)
35 print "Impossible de trouver le fichier %s ! \n Prévenez la maintenance ..." %fic_ini
37 self.fic_ini = fic_ini
38 self.init_liste_param()
39 self.lecture_fichier_ini_standard()
40 self.lecture_fichier_ini_utilisateur()
42 def lecture_fichier_ini_standard(self):
44 Relit les paramètres du fichier eficas.ini
46 txt = utils.read_file(self.fic_ini)
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:])
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")
64 setattr(self,nom_attr,valeur)
65 self.init_liste_param()
67 def lecture_fichier_ini_utilisateur(self):
69 Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
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
75 txt = utils.read_file(self.fic_ini_utilisateur)
80 showinfo("Erreur","Impossible d'interpréter le fichier de configuration utilisateur : %s" %self.fic_ini_utilisateur)
83 for attr in self.l_nom_param:
84 nom_attr,statut = attr
85 valeur = d.get(nom_attr,None)
87 setattr(self,nom_attr,valeur)
88 self.init_liste_param()
90 def init_liste_param(self):
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)
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))
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))
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))
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))
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))
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))
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))
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)
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 ...
142 self.l_nom_param.append((tup[2],statut))
144 def affichage_fichier_ini(self):
146 Affichage des valeurs des paramètres relus par Eficas
149 result = widgets.Formulaire(self.parent,
151 titre = "Paramètres nécessaires à la configuration d'EFICAS",
152 texte = "Voici les paramètres que requiert Eficas",
153 items = self.l_param,
155 commande=('Modifier',self.creation_fichier_ini_si_possible))
157 print 'on sauvegarde les nouveaux paramètres :',result.resultat
158 self.save_param_ini(result.resultat)
160 def save_param_ini(self,dico):
162 Sauvegarde les nouveaux paramètres dans le fichier de configuration utilisateur
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')
169 f.write(k + '\t=\t"' + str(v) + '"\n')
171 self.lecture_fichier_ini_utilisateur()
173 def creation_fichier_ini_si_possible(self):
174 return self.creation_fichier_ini(mode='ignorer_annuler')
176 def creation_fichier_ini(self,mode='considerer_annuler'):
178 Récupération des valeurs des paramétres requis pour la création du fichier
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 !!"
186 result = widgets.Formulaire(self.parent,
188 titre = "Saisie des données indispensables à la configuration d'EFICAS",
192 if not result.resultat :
193 if mode == 'considerer_annuler':
194 test = askretrycancel("Erreur","Données incorrectes !")
196 # XXX On sort d'EFICAS, je suppose
197 self.appli.exitEFICAS()
199 self.creation_fichier_ini()
203 self.save_param_ini(result.resultat)
204 return result.resultat
206 def make_config(appli,rep):
207 return CONFIG(appli,rep)