# storage.py """ Gestion du stockage "avancé" pour agent_v0. v0 : - création d'une archive ZIP pour une session donnée """ from __future__ import annotations import os import zipfile from config import SESSIONS_ROOT from raw_session import RawSession def create_session_zip(session: RawSession, base_dir: str | None = None) -> str: """ Crée un ZIP contenant tout le dossier de la session : sessions// - .json - shots/*.png Le ZIP est créé dans SESSIONS_ROOT : sessions/.zip Retourne le chemin absolu du ZIP. """ base_dir = base_dir or SESSIONS_ROOT session_dir = os.path.join(base_dir, session.session_id) if not os.path.isdir(session_dir): raise FileNotFoundError(f"Dossier de session introuvable : {session_dir}") zip_path = os.path.join(base_dir, f"{session.session_id}.zip") # On crée/écrase le zip with zipfile.ZipFile(zip_path, "w", compression=zipfile.ZIP_DEFLATED) as zf: for root, _, files in os.walk(session_dir): for name in files: full_path = os.path.join(root, name) # chemin relatif dans l'archive (à partir de SESSIONS_ROOT) arcname = os.path.relpath(full_path, base_dir) zf.write(full_path, arcname) return os.path.abspath(zip_path)