Retourne le nom du fichier correspondant à un numero d'unité
logique (entier) ainsi que le source contenu dans le fichier
"""
- if self.recorded_units.has_key(unite):
- return self.recorded_units[unite]
- elif self.appli :
+ if self.appli :
# Si le JDC est relié à une application maitre, on délègue la recherche
file,text = self.appli.get_file(unite,fic_origine)
else:
for etape in self.etapes :
print etape.nom+".state: ",etape.state
+ def change_unit(self,unit,etape,old_unit):
+ if self.recorded_units.has_key(old_unit):del self.recorded_units[old_unit]
+ self.record_unit(unit,etape)
+
def record_unit(self,unit,etape):
"""Enregistre les unites logiques incluses et les infos relatives a l'etape"""
if unit is None:
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:
+ if unite != self.fichier_unite:
+ # Changement d'unite
f,text=self.get_file(unite=unite,fic_origine=self.parent.nom)
units={}
- self.fichier_ini = f
- self.fichier_text=text
+ self.fichier_ini = f
+ self.fichier_text=text
+ self.recorded_units=units
+ # 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)
+ elif not self.parent.recorded_units.has_key(unite):
+ # Nouvelle unite
+ f,text=self.get_file(unite=unite,fic_origine=self.parent.nom)
+ units={}
+ self.fichier_ini = f
+ self.fichier_text=text
+ self.recorded_units=units
+ self.parent.change_unit(unite,self,self.fichier_unite)
+ else:
+ # Meme unite existante
+ f,text,units=self.parent.recorded_units[unite]
+ self.fichier_ini = f
+ self.fichier_text=text
+ self.recorded_units=units
+
self.fichier_err=None
- self.recorded_units=units
self.old_contexte_fichier_init=self.contexte_fichier_init
try:
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 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
+ """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]
- elif self.jdc :
+ if self.jdc :
f,text=self.jdc.get_file(unite=unite,fic_origine=fic_origine)
else:
f,text=None,None
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
self.fichier_ini = f
self.fichier_text = text
self.contexte_fichier_init={}
+ self.fichier_unite=unite
self.parent.record_unit(unite,self)
if f is None:
self.fichier_err="Le fichier INCLUDE n est pas defini"
# 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)