X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Noyau%2FN_JDC.py;h=4068fee866baadd32aa7005fed2653b04be91b00;hb=f1ca95b49f76bed371d3bc90fc94bd12a6f17523;hp=868fac35563acd187d4d1e84b200ae8ca12c8935;hpb=049556ac965f6227ef8ac02b7d25e714ecc513ab;p=tools%2Feficas.git diff --git a/Noyau/N_JDC.py b/Noyau/N_JDC.py index 868fac35..4068fee8 100644 --- a/Noyau/N_JDC.py +++ b/Noyau/N_JDC.py @@ -1,4 +1,5 @@ -#@ MODIF N_JDC Noyau DATE 23/10/2002 AUTEUR DURAND C.DURAND +#@ MODIF N_JDC Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS +# -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG @@ -18,6 +19,8 @@ # # # ====================================================================== + + """ Ce module contient la classe JDC qui sert à interpréter un jeu de commandes """ @@ -99,6 +102,8 @@ NONE = None self.current_context={} self.condition_context={} self.index_etape_courante=0 + self.UserError="UserError" + self.alea = None def compile(self): """ @@ -108,8 +113,7 @@ NONE = None """ 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() @@ -151,8 +155,7 @@ NONE = None 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é @@ -168,6 +171,7 @@ NONE = None # de commandes avant la fin # Fonctionnement normal, ne doit pas etre considere comme une erreur CONTEXT.unset_current_step() + self.traiter_fin_exec('commande') except AsException,e: # une erreur a ete identifiee @@ -182,25 +186,44 @@ NONE = None s= traceback.format_exception_only("Erreur de nom",e)[0][:-1] message = "erreur de syntaxe, %s ligne %d" % (s,l[-1][1]) if CONTEXT.debug : - #prbanner(message) traceback.print_exc() self.cr.exception(message) CONTEXT.unset_current_step() + except self.UserError,exc_val: + self.traiter_user_exception(exc_val) + CONTEXT.unset_current_step() + self.traiter_fin_exec('commande') + except : # erreur inattendue # sys_exc_typ,sys_exc_value,sys_exc_frame = sys_exc.info() # (tuple de 3 éléments) - if CONTEXT.debug : - traceback.print_exc() - #prbanner("erreur non prevue et non traitee prevenir \ - # la maintenance "+self.nom) - l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1], - sys.exc_info()[2]) + if CONTEXT.debug : traceback.print_exc() + + exc_typ,exc_val,exc_fr=sys.exc_info() + l=traceback.format_exception(exc_typ,exc_val,exc_fr) self.cr.exception("erreur non prevue et non traitee prevenir la maintenance "+ self.nom+'\n'+ string.join(l)) + del exc_typ,exc_val,exc_fr CONTEXT.unset_current_step() + 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 + surchargée pour en introduire un. + """ + return + def register(self,etape): """ Cette méthode ajoute etape dans la liste des etapes : self.etapes @@ -243,9 +266,9 @@ NONE = None Dans le cas du JDC, le deuxième cas ne peut pas se produire. """ sd= etape.get_sd_prod() - if sd != None and etape.reuse == None: + if sd != None and (etape.definition.reentrant == 'n' or etape.reuse is None) : # ATTENTION : On ne nomme la SD que dans le cas de non reutilisation - # d un concept + # d un concept. Commande non reentrante ou reuse absent. self.NommerSdprod(sd,nomsd) return sd @@ -257,6 +280,7 @@ NONE = None Met le concept créé dans le concept global g_context """ if CONTEXT.debug : print "JDC.NommerSdprod ",sd,sdnom + o=self.sds_dict.get(sdnom,None) if isinstance(o,ASSD): raise AsException("Nom de concept deja defini : %s" % sdnom) @@ -301,20 +325,22 @@ NONE = None """ 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: if os.path.exists("fort."+str(unite)): file= "fort."+str(unite) if file == None : - raise AsException("Impossible de trouver le fichier correspondant \ - a l unite %s" % unite) + raise AsException("Impossible de trouver le fichier correspondant" + " 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 @@ -383,9 +409,12 @@ NONE = None 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: @@ -398,3 +427,14 @@ NONE = None 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) +