Initial commit
This commit is contained in:
48
storage.py
Normal file
48
storage.py
Normal file
@@ -0,0 +1,48 @@
|
||||
# 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/<session_id>/
|
||||
- <session_id>.json
|
||||
- shots/*.png
|
||||
|
||||
Le ZIP est créé dans SESSIONS_ROOT :
|
||||
sessions/<session_id>.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)
|
||||
Reference in New Issue
Block a user