Disparition d'objets entre l'appel et le retour d'une fonction
Bonjour,
J'ai une classe dans laquelle je charge une structure à partir d'un fichier
Tous les objets relatifs à la structure sont dans un module
Lorsque je charge cette structure, tous mes logs au cours de ce chargement semblent indiquer que tout se passe bien.
Mais une fois revenu dans la fonction appelante, tous les objets ont disparu
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
import traceback
import os
import Config.Parameters as Prm
import DecEnr
import logging
os.environ['BASE_DIR'] = os.getcwd()
class DecEnrParser:
def __init__(self, parameter_file='./DecEnrParser.yml'):
Prm.load(parameter_file)
self.init_logger()
self.dec_enr_structure = DecEnr.Structure()
self.dec_enr_structure.load() ### Chargement de la structure, le log à la fin de cette méthode est plus bas (log 1)
logging.debug("{}".format(self.dec_enr_structure)) ### <<< Le résultat de ce log est un peu plus bas (log 2) |
N'étant pas très au point sur les modules, je mets ici le contenu du fichier __init__.py contenu dans le répertoire DecEnr
Code:
1 2 3 4 5 6 7 8 9
|
from .Structure import *
from .Record import *
# J'ai aussi essayé en ajoutant tous les objets du module
from .Cellule import *
from .CellulesCollection import *
from .Zone import *
from .ZoneCollection import * |
En gros, la structure contient une collection de cellules (en fait un dictionnaire encapsulé dans un objet)
Les cellules sont elles-mêmes des objets contenant chacune une collection de zones, chaque zone étant un objet...
Voici le début du fichier relatif à la structure avec la méthode de chargement (load)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
import csv
from .CellulesCollection import *
from .Zone import *
from .Cellule import *
import Config.Parameters as Prm
class Structure:
def __init__(self):
csv.register_dialect('excel_french', excel_french)
self.cellules = CellulesCollection()
def __repr__(self):
return str(self.cellules)
def load(self): # Procédure de chargement des données qui semble bien se passer
with open(Prm.get('structure/filename'), encoding=Prm.get('structure/encoding')) as inf:
cr=csv.reader(inf, 'excel_french')
is_struct_part = False
for i, csv_row in enumerate(cr):
if i==0:
header = self.map(csv_row)
else:
row = dict(zip(header, csv_row))
if row["Orig"] == 'Fichier':
zone = Zone(row)
self.cellules.add(zone)
self.cellules.update_pos()
self.cellules.update_len()
logging.debug("{}".format(self)) ### <<< Le résultat de ce log est un peu plus bas (log 1) |
LOG 1 : à la fin du chargement de la structure. Tout est nickel.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
2021-02-03 13:28:53,882 [INFO] Structure.py - load : Cellule Cellule01
> CEL-TYP : 2 - 1 2
> LIG-NUM : 2 - 3 2
> TRM-FRI : 2 - 5 59
> EME-IDT : 3 - 5 15
> PAR-IDT : 3 - 20 9
> LOT-DTJ : 3 - 29 9
[...]
Cellule Cellule02
> CEL-TYP : 2 - 1 2
> NEC-FAC : 2 - 3 6
> SLM-IDT : 3 - 3 5
> SLM-NRO : 4 - 3 3
> CLM-COD : 4 - 6 2
[...] |
LOG 2 : au retour de la fonction
Les clés du dictionnaire de la Collection de cellule sont toujours là mais plus le contenu
Je n'arrive pas à comprendre comment ce contenu disparaît entre la fin de la fonction de chargement et le retour de cette fonction.
Code:
1 2 3 4 5 6
|
2021-02-03 13:28:53,884 [INFO] Record.py - __init__ : Cellule Cellule01
Cellule Cellule02
Cellule Cellule04
Cellule Cellule05
Cellule Cellule06 |
Je ne comprends pas ce qu'il se passe ici. Problème avec l'implémentation d'un module ?
EDIT:
Ce n'est pas lié à l'utilisation des modules.
En mettant tous les fichiers sources dans le même répertoire, j'ai le même problème.