+# -*- coding: utf-8 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
import traceback
import cPickle
import Pmw
-from tkMessageBox import showinfo,showerror
# Modules Eficas
import prefs
import fontes
import analyse_catalogue
from Noyau.N_CR import CR
+from widgets import showinfo,showerror
from widgets import Fenetre
from utils import init_rep_cata_dev
self.parent=parent
self.code=self.appli.code
self.appli.format_fichier.set('python')
+ self.version_code=self.appli.version_code
+ self.fic_cata=None
self.OpenCata()
self.cataitem=None
dans le répertoire Cata
"""
message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..."
- splash._splash.configure(text = message1)
- if len(self.appli.CONFIGURATION.catalogues) == 1:
- self.fic_cata = self.appli.CONFIGURATION.catalogues[0][2]
+ if self.appli.test == 0 :
+ splash._splash.configure(text = message1)
+ self.configure_barre(4)
+
+ liste_cata_possibles=[]
+ for catalogue in self.appli.CONFIGURATION.catalogues:
+ if catalogue[0] == self.code :
+ liste_cata_possibles.append(catalogue)
+
+ if len(liste_cata_possibles)==0:
+ showerror("Import du catalogue","Pas de catalogue defini pour le code %s" % self.code)
+ self.appli.quit()
+ sys.exit(1)
+
+ if self.version_code is not None:
+ # La version a ete fixee
+ for cata in liste_cata_possibles:
+ if self.version_code == cata[1]:
+ self.fic_cata = cata[2]
+ self.appli.format_fichier.set(cata[3])
+ elif len(liste_cata_possibles)==1:
+ self.fic_cata = liste_cata_possibles[0][2]
self.code = self.appli.CONFIGURATION.catalogues[0][0]
- self.version_code = self.appli.CONFIGURATION.catalogues[0][1]
- self.appli.format_fichier.set(self.appli.CONFIGURATION.catalogues[0][3])
- elif len(self.appli.CONFIGURATION.catalogues) == 0:
- # aucun catalogue défini dans le fichier Accas/editeur.ini
- if self.code == 'ASTER' :
- self.fic_cata = os.path.join(prefs.CODE_PATH,'Cata','cata.py')
- elif self.code == 'SATURNE' :
- self.fic_cata = os.path.join(prefs.CODE_PATH,'Cata','cata_saturne.py')
- elif self.code == 'DESCARTES':
- self.fic_cata = os.path.join(prefs.CODE_PATH,'Cata','cata_descartes.py')
- else :
- print 'Code inconnu'
- sys.exit(0)
+ self.version_code = liste_cata_possibles[0][1]
+ self.appli.format_fichier.set(liste_cata_possibles[0][3])
else:
# plusieurs catalogues sont disponibles : il faut demander à l'utilisateur
# lequel il veut utiliser ...
self.ask_choix_catalogue()
+
if self.fic_cata == None :
- self.parent.destroy()
+ print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code)
sys.exit(0)
+
# détermination de fic_cata_c et fic_cata_p
self.fic_cata_c = self.fic_cata + 'c'
self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py'
- print "Debut compil cata: ",time.clock()
+
+ #if self.appli.test == 0 :
+ # splash._splash.configure(text = "Debut compil cata: %d s" % time.clock())
# compilation éventuelle du catalogue
- test = self.compile_cata(self.fic_cata,self.fic_cata_c)
- print "Fin compil cata: ",time.clock()
- if not test : showerror("Compilation catalogue","Impossible de compiler le catalogue %s" %self.fic_cata)
+ #test = self.compile_cata(self.fic_cata,self.fic_cata_c)
+ #self.update_barre()
+ #if self.appli.test == 0 :
+ # splash._splash.configure(text = "Fin compil cata: %d s" % time.clock())
+ #if not test : showerror("Compilation catalogue","Impossible de compiler le catalogue %s" %self.fic_cata)
+
# import du catalogue
- print "Debut import_cata: ",time.clock()
+ if self.appli.test == 0 :
+ splash._splash.configure(text = "Debut import_cata: %d s" % time.clock())
self.cata = self.import_cata(self.fic_cata)
- print "Fin import_cata: ",time.clock()
+ self.update_barre()
+ if self.appli.test == 0 :
+ splash._splash.configure(text = "Fin import_cata: %d s" % time.clock())
if not self.cata : showerror("Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata)
+
#
# analyse du catalogue (ordre des mots-clés)
#
- print "Debut Retrouve_Ordre: ",time.clock()
+ if self.appli.test == 0 :
+ splash._splash.configure(text = "Debut Retrouve_Ordre: %d s" % time.clock())
# Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue
# remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation
# des mots clés à la création
#self.Retrouve_Ordre_Cata_Standard()
self.Retrouve_Ordre_Cata_Standard_autre()
- print "Fin Retrouve_Ordre: ",time.clock()
+ self.update_barre()
+ if self.appli.test == 0 :
+ splash._splash.configure(text = "Fin Retrouve_Ordre: %d s" % time.clock())
#
# analyse des données liées à l'IHM : UIinfo
#
- print "Debut UIinfo: ",time.clock()
uiinfo.traite_UIinfo(self.cata)
- print "Fin UIinfo: ",time.clock()
+ self.update_barre()
+
#
+ # traitement des clefs documentaires
+ #
+ self.traite_clefs_documentaires()
+
# chargement et analyse des catalogues développeur (le cas échéant)
#
if self.appli.CONFIGURATION.isdeveloppeur == 'OUI' :
"""
Réalise l'import du catalogue dont le chemin d'accès est donné par cata
"""
- import imp
- splash._splash.configure(text = "Chargement du catalogue")
+ if self.appli.test == 0 :
+ splash._splash.configure(text = "Chargement du catalogue")
nom_cata = os.path.splitext(os.path.basename(cata))[0]
rep_cata = os.path.dirname(cata)
sys.path[:0] = [rep_cata]
try :
- f,p,d = imp.find_module(nom_cata)
- o = imp.load_module(nom_cata,f,p,d)
+ o=__import__(nom_cata)
return o
except Exception,e:
traceback.print_exc()
Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui
contient le nom des mots clés dans le bon ordre
"""
- self.cata_ordonne_dico=autre_analyse_cata.analyse_catalogue(self.cata)
+ self.cata_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
def Retrouve_Ordre_Cata_Standard(self):
"""
if self.code != 'ASTER' : return
fic_cata = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev
- splash._splash.configure(text = message,barre='oui')
+ if self.appli.test == 0 :
+ splash._splash.configure(text = message,barre='oui')
cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata)
self.cata_dev_ordonne_cr = cata_dev_ordonne.cr
cata_dev_ordonne_dico = cata_dev_ordonne.entites
"""
if self.code != 'ASTER' : return
message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev
- splash._splash.configure(text = message,barre='oui')
- cata_dev_ordonne_dico = autre_analyse_cata.analyse_catalogue(self.cata_dev)
+ if self.appli.test == 0 :
+ splash._splash.configure(text = message,barre='oui')
+ cata_dev_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
try:
f = open(self.fic_cata_p)
u = cPickle.Unpickler(f)
- splash._splash.configure(text = "Analyse du catalogue")
+ if self.appli.test == 0 :
+ splash._splash.configure(text = "Analyse du catalogue")
self.cata_ordonne_dico = u.load()
f.close()
except :
# ou (le plus probable) s'il a été créé sous un autre OS
self.Get_Ordre_Cata(mode='cata')
elif mode == 'cata':
- splash._splash.configure(text = "Analyse du catalogue",barre='oui')
+ if self.appli.test == 0 :
+ splash._splash.configure(text = "Analyse du catalogue",barre='oui')
cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata)
self.cata_ordonne_cr = cata_ordonne.cr
self.cata_ordonne_dico = cata_ordonne.entites
# test si plusieurs catalogues ou non
if len(liste_choix) == 0:
showerror("Aucun catalogue déclaré pour %s" %self.code)
- self.quit()
+ self.appli.quit()
+ sys.exit(1)
elif len(liste_choix) == 1:
self.fic_cata = self.dico_catalogues[liste_choix[0]][2]
self.version_code = liste_choix[0]
return
# création d'une boîte de dialogue modale
- self.fenetre_choix_cata = Pmw.Dialog(self.parent,
+ self.fenetre_choix_cata = Pmw.Dialog(splash._splash, #avec self.parent, ne marche pas sous Windows
buttons=('OK','ANNULER'),
defaultbutton = 'OK',
title = "Choix d'une version du code %s" %self.code,
if time1 > time2:
try:
# le catalogue doit être recompilé avant d'être importé
- splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...")
+ if self.appli.test == 0 :
+ splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...")
py_compile.compile(cata)
except:
return 0
""" Configure la barre de progression en lui passant comme paramètre le
nombre de commandes du catalogue qui lui sert à déterminer la longueur de son incrément """
try:
- splash._splash.configure(barre='oui',ratio = nbcommandes)
+ if self.appli.test == 0 :
+ splash._splash.configure(barre='oui',ratio = nbcommandes)
except:
pass
def update_barre(self):
""" Update la position de la barre de progression : la fait progresser de son incrément """
try:
- splash._splash.update_barre()
+ if self.appli.test == 0 :
+ splash._splash.update_barre()
except:
pass
texte_cr = str(cr)
self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr)
+
+ def traite_clefs_documentaires(self):
+ try:
+ self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu'
+ f=open(self.fic_cata_clef)
+ except:
+ #print "Pas de fichier associé contenant des clefs documentaires"
+ return
+
+ dict_clef_docu={}
+ for l in f.readlines():
+ clef=l.split(':')[0]
+ docu=l.split(':')[1]
+ docu=docu[0:-1]
+ dict_clef_docu[clef]=docu
+ for oper in self.cata.JdC.commandes:
+ if dict_clef_docu.has_key(oper.nom):
+ oper.docu=dict_clef_docu[oper.nom]