-#@ MODIF N_JDC Noyau DATE 23/10/2002 AUTEUR DURAND C.DURAND
+#@ MODIF N_JDC Noyau DATE 05/09/2005 AUTEUR DURAND C.DURAND
+# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
#
#
# ======================================================================
+
+
"""
Ce module contient la classe JDC qui sert à interpréter un jeu de commandes
"""
self.condition_context={}
self.index_etape_courante=0
self.UserError="UserError"
+ self.alea = None
def compile(self):
"""
"""
try:
if self.appli != None :
- self.appli.affiche_infos('Compilation du fichier de commandes \
- en cours ...')
+ self.appli.affiche_infos('Compilation du fichier de commandes en cours ...')
self.proc_compile=compile(self.procedure,self.nom,'exec')
except SyntaxError,e:
if CONTEXT.debug : traceback.print_exc()
if isinstance(sd,ASSD):self.sds_dict[sdnom]=sd
if self.appli != None :
- self.appli.affiche_infos('Interprétation du fichier de \
- commandes en cours ...')
+ self.appli.affiche_infos('Interprétation du fichier de commandes en cours ...')
# On sauve le contexte pour garder la memoire des constantes
# En mode edition (EFICAS) ou lors des verifications le contexte
# est recalculé
# de commandes avant la fin
# Fonctionnement normal, ne doit pas etre considere comme une erreur
CONTEXT.unset_current_step()
+ self.affiche_fin_exec()
+ self.traiter_fin_exec('commande')
except AsException,e:
# une erreur a ete identifiee
except self.UserError,exc_val:
self.traiter_user_exception(exc_val)
CONTEXT.unset_current_step()
+ self.traiter_fin_exec('commande')
except :
# erreur inattendue
del exc_typ,exc_val,exc_fr
CONTEXT.unset_current_step()
+ def affiche_fin_exec(self):
+ """
+ Cette methode realise l'affichage final des statistiques de temps
+ apres l'execution de toutes
+ les commandes en mode commande par commande ou par lot
+ Elle doit etre surchargee pour en introduire un
+ """
+ return
+
+ def traiter_fin_exec(self,mode,etape=None):
+ """
+ Cette methode realise un traitement final apres l'execution de toutes
+ les commandes en mode commande par commande ou par lot
+ Par defaut il n'y a pas de traitement. Elle doit etre surchargee
+ pour en introduire un
+ """
+ print "FIN D'EXECUTION",mode,etape
+
def traiter_user_exception(self,exc_val):
"""Cette methode realise un traitement sur les exceptions utilisateur
Par defaut il n'y a pas de traitement. La méthode doit etre
def create_sdprod(self,etape,nomsd):
"""
- Intention : Cette methode doit fabriquer le concept produit retourne
+ Intention : Cette methode doit fabriquer le concept produit retourne
par l'etape etape et le nommer.
Elle est appelée à l'initiative de l'etape
pendant le processus de construction de cette etape :
- - methode __call__ de la classe CMD (OPER ou MACRO)
+ methode __call__ de la classe CMD (OPER ou MACRO)
Ce travail est réalisé par le contexte supérieur
(etape.parent) car dans certains cas, le concept ne doit
pas etre fabriqué mais l'etape doit simplement utiliser
un concept préexistant.
- 1. etape.reuse != None : le concept est réutilisé
- 2. l'étape appartient à une macro qui a déclaré un
+ Cas 1 : etape.reuse != None : le concept est réutilisé
+ Cas 2 : l'étape appartient à une macro qui a déclaré un
concept de sortie qui doit etre produit par cette
etape.
Dans le cas du JDC, le deuxième cas ne peut pas se produire.
"""
if self.appli :
# Si le JDC est relié à une application maitre, on délègue la recherche
- file= self.appli.get_file(unite,fic_origine)
+ file,text= self.appli.get_file(unite,fic_origine)
else:
file = None
if unite != None:
" a l unite %s" % unite)
if not os.path.exists(file):
raise AsException("%s n'est pas un fichier existant" % unite)
- fproc=open(file,'r')
- text=string.replace(fproc.read(),'\r\n','\n')
- fproc.close()
+ fproc=open(file,'r')
+ text=fproc.read()
+ fproc.close()
+ if file == None : return None,None
+ text=string.replace(text,'\r\n','\n')
linecache.cache[file]=0,0,string.split(text,'\n'),file
return file,text
if index_etape >= self.index_etape_courante:
# On calcule le contexte en partant du contexte existant
d=self.current_context
+ if self.index_etape_courante==0 and self.context_ini:
+ d.update(self.context_ini)
liste_etapes=self.etapes[self.index_etape_courante:index_etape]
else:
d=self.current_context={}
+ if self.context_ini:d.update(self.context_ini)
liste_etapes=self.etapes
for e in liste_etapes:
def get_global_contexte(self):
return self.g_context.copy()
+
+ def get_cmd(self,nomcmd):
+ """
+ Méthode pour recuperer la definition d'une commande
+ donnee par son nom dans les catalogues declares
+ au niveau du jdc
+ """
+ for cata in self.cata:
+ if hasattr(cata,nomcmd):
+ return getattr(cata,nomcmd)
+