prefix_include=None
if hasattr(self,'prefix'):
prefix_include=self.prefix
+ # ATTENTION : le dictionnaire recorded_units sert à memoriser les unites des
+ # fichiers inclus. Il est preferable de garder le meme dictionnaire pendant
+ # tout le traitement et de ne pas le reinitialiser brutalement (utiliser clear plutot)
+ # si on ne veut pas perdre la memoire des unites.
+ # En principe si la memorisation est faite au bon moment il n'est pas necessaire
+ # de prendre cette precaution mais ce n'est pas vrai partout.
+ old_recorded_units=self.recorded_units.copy()
+ self.recorded_units.clear()
j=self.JdC_aux( procedure=text,cata=self.jdc.cata,
nom=fichier,
appli=self.jdc.appli,
jdc_pere=self.jdc,etape_include=self,
prefix_include=prefix_include,
- recorded_units=self.recorded_units,**args)
+ recorded_units=self.recorded_units,
+ old_recorded_units=old_recorded_units,**args)
j.analyse()
# On récupère les étapes internes (pour validation)
"""
for nom_sd,sd in context.items():
if not isinstance(sd,ASSD):continue
- if self.parent.get_sd_apres_etape(nom_sd,etape=self):
- # Il existe un concept apres self => impossible d'inserer
+ #if self.parent.get_sd_apres_etape(nom_sd,etape=self):
+ if self.parent.get_sd_apres_etape_avec_detruire(nom_sd,sd,etape=self):
+ # Il existe un concept produit par une etape apres self => impossible d'inserer
# On force le contexte (etape courante) à self
CONTEXT.unset_current_step()
CONTEXT.set_current_step(self)
les noms des fichiers
Ceci suppose que les relations entre unites et noms ont été memorisees préalablement
"""
- if self.parent.recorded_units.has_key(unite):
- f,text,units=self.parent.recorded_units[unite]
- else:
- f,text=self.get_file(unite=unite,fic_origine=self.parent.nom)
- units={}
- self.fichier_ini = f
- self.fichier_text=text
+
self.fichier_err=None
- self.recorded_units=units
self.old_contexte_fichier_init=self.contexte_fichier_init
+ if unite != self.fichier_unite or not self.parent.recorded_units.has_key(unite):
+ # Changement d'unite ou Nouvelle unite
+ f,text=self.get_file(unite=unite,fic_origine=self.parent.nom)
+ units={}
+ if f is not None:
+ self.fichier_ini = f
+ self.fichier_text=text
+ self.recorded_units=units
+ if self.fichier_ini is None and self.jdc.appli:
+ self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
+ message="Ce fichier ne sera pas pris en compte\n"+"Le fichier associé n'est pas défini")
+ else:
+ # Meme unite existante
+ f,text,units=self.parent.recorded_units[unite]
+ self.fichier_ini = f
+ self.fichier_text=text
+ self.recorded_units=units
+
+ if self.fichier_ini is None:
+ # Le fichier n'est pas défini
+ self.fichier_err="Le fichier associé n'est pas défini"
+ self.parent.change_unit(unite,self,self.fichier_unite)
+ self.g_context={}
+ self.contexte_fichier_init={}
+ self.parent.reset_context()
+ self.reevalue_sd_jdc()
+ return
+
try:
- self.make_contexte_include(f,text)
+ self.make_contexte_include(self.fichier_ini,self.fichier_text)
+ # Les 3 attributs fichier_ini fichier_text recorded_units doivent etre corrects
+ # avant d'appeler change_unit
+ self.parent.change_unit(unite,self,self.fichier_unite)
except:
# Erreurs lors de l'evaluation de text dans un JDC auxiliaire
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
# mais on n'utilise pas les concepts crees par ce fichier
# on met l'etape en erreur : fichier_err=string.join(l)
self.fichier_err=string.join(l)
+ self.parent.change_unit(unite,self,self.fichier_unite)
self.g_context={}
self.contexte_fichier_init={}
"""
if not hasattr(self,'fichier_ini') :
# Si le fichier n'est pas defini on le demande
- f,text=self.get_file(fic_origine=self.parent.nom)
+ f,text=self.get_file_memo(fic_origine=self.parent.nom)
# On memorise le fichier retourne
self.fichier_ini = f
self.fichier_unite = None
self.fichier_text = text
+ self.fichier_err=None
import Extensions.jdc_include
self.JdC_aux=Extensions.jdc_include.JdC_poursuite
self.contexte_fichier_init={}
- self.parent.record_unit(None,self)
+
if f is None:
self.fichier_err="Le fichier POURSUITE n'est pas defini"
- else:
- self.fichier_err=None
-
- if self.fichier_err is not None: raise Exception(self.fichier_err)
+ self.parent.record_unit(None,self)
+ raise Exception(self.fichier_err)
try:
self.make_contexte_include(self.fichier_ini,self.fichier_text)
+ self.parent.record_unit(None,self)
except:
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
if self.jdc.appli:
self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier poursuite",
message="Ce fichier ne sera pas pris en compte\n"+string.join(l)
)
+ self.parent.record_unit(None,self)
self.g_context={}
- #self.etapes=[]
self.fichier_err = string.join(l)
self.contexte_fichier_init={}
raise
if self.fichier_err is not None: raise Exception(self.fichier_err)
def get_file(self,unite=None,fic_origine=''):
+ """Retourne le nom du fichier et le source correspondant a l'unite unite
+ Initialise en plus recorded_units
"""
- Retourne le nom du fichier associe a l unite logique unite (entier)
- ainsi que le source contenu dans le fichier
- Retourne en plus un dictionnaire contenant les sous includes memorises
+ units={}
+ if self.jdc :
+ f,text=self.jdc.get_file(unite=unite,fic_origine=fic_origine)
+ else:
+ f,text=None,None
+ self.recorded_units=units
+ return f,text
+
+ def get_file_memo(self,unite=None,fic_origine=''):
+ """Retourne le nom du fichier et le source correspondant a l'unite unite
+ Initialise en plus recorded_units
"""
units={}
- if self.parent.recorded_units.has_key(unite):
- f,text,units=self.parent.recorded_units[unite]
+ if self.parent.old_recorded_units.has_key(unite):
+ f,text,units=self.parent.old_recorded_units[unite]
+ self.recorded_units=units
+ return f,text
elif self.jdc :
f,text=self.jdc.get_file(unite=unite,fic_origine=fic_origine)
else:
f,text=None,None
self.recorded_units=units
+ if f is None and self.jdc.appli:
+ self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
+ message="Ce fichier ne sera pas pris en compte\n"+"Le fichier associé n'est pas défini")
return f,text
#ATTENTION : cette methode surcharge celle de Noyau (a garder en synchro)
del self.unite
# Si unite n'a pas de valeur, l'etape est forcement invalide. On peut retourner None
if not unite : return
- self.fichier_unite=unite
if not hasattr(self,'fichier_ini') :
# Si le fichier n'est pas defini on le demande
- f,text=self.get_file(unite=unite,fic_origine=self.parent.nom)
+ f,text=self.get_file_memo(unite=unite,fic_origine=self.parent.nom)
# On memorise le fichier retourne
self.fichier_ini = f
self.fichier_text = text
self.contexte_fichier_init={}
- self.parent.record_unit(unite,self)
- if f is None:
- self.fichier_err="Le fichier INCLUDE n est pas defini"
- else:
- self.fichier_err=None
+ self.fichier_unite=unite
+ self.fichier_err=None
import Extensions.jdc_include
self.JdC_aux=Extensions.jdc_include.JdC_include
- if self.fichier_err is not None: raise Exception(self.fichier_err)
+ if f is None:
+ self.fichier_err="Le fichier INCLUDE n est pas defini"
+ self.parent.record_unit(unite,self)
+ raise Exception(self.fichier_err)
try:
self.make_contexte_include(self.fichier_ini ,self.fichier_text)
+ self.parent.record_unit(unite,self)
except:
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
if self.jdc.appli:
self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
message="Ce fichier ne sera pas pris en compte\n"+string.join(l)
)
+ self.parent.record_unit(unite,self)
self.g_context={}
- #self.etapes=[]
self.fichier_err = string.join(l)
self.contexte_fichier_init={}
raise
# Si le fichier est deja defini on ne reevalue pas le fichier
# et on leve une exception si une erreur a été enregistrée
self.update_fichier_init(unite)
+ self.fichier_unite=unite
if self.fichier_err is not None: raise Exception(self.fichier_err)
self.fichier_ini =fichier
self.fichier_unite =fichier
self.fichier_text=text
- self.parent.record_unit(self.fichier_unite,self)
self.fichier_err=None
self.contexte_fichier_init={}
# On specifie la classe a utiliser pour le JDC auxiliaire
self.JdC_aux=Extensions.jdc_include.JdC_include
try:
self.make_contexte_include(self.fichier_ini ,self.fichier_text)
+ self.parent.record_unit(self.fichier_unite,self)
except:
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
- self.g_context={}
- #self.etapes=[]
self.fichier_err = string.join(l)
+ self.parent.record_unit(self.fichier_unite,self)
+ self.g_context={}
self.contexte_fichier_init={}
raise