From 5b96e3f32a20253d422040718aaea6be40c77fe4 Mon Sep 17 00:00:00 2001 From: Cyber Mawonaj Date: Sat, 25 Jul 2026 23:21:26 -0400 Subject: [PATCH] =?UTF-8?q?Chemins=20de=20sortie=20explicites,=20pour=20un?= =?UTF-8?q?=20d=C3=A9ploiement=20hors=20de=20l'arbre=20des=20sources?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deux hypothèses du code ne tiennent plus dès qu'on l'installe ailleurs que dans son dépôt : - la racine était déduite de l'emplacement du module. Une installation non éditable la fait pointer vers site-packages, et le corpus de data/input/ est alors cherché à côté du venv, où il n'est pas. VEILLE_RACINE lève l'ambiguïté ; sans elle, le comportement d'avant est conservé. - l'export JSON était figé sous data/, donc dans le répertoire d'installation. Sur YunoHost celui-ci est effacé à chaque mise à jour. VEILLE_DUMP_JSON le déplace avec la base et le cache. Constaté en simulant l'installation, pas en relisant le code : VEILLE_DB était honorée et VEILLE_DUMP_JSON ignorée, le dump repartant dans l'arbre des sources. Co-Authored-By: Claude Opus 5 --- pipeline/chemins.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/pipeline/chemins.py b/pipeline/chemins.py index 3f4353a..c03a49c 100644 --- a/pipeline/chemins.py +++ b/pipeline/chemins.py @@ -11,8 +11,17 @@ from pathlib import Path from dotenv import load_dotenv -# pipeline/chemins.py → pipeline/ → racine du dépôt -RACINE = Path(__file__).resolve().parent.parent +# pipeline/chemins.py → pipeline/ → racine du dépôt. +# +# Ce calcul suppose que le paquet est exécuté depuis l'arbre des sources, ce qui +# est le cas en développement. Une installation non éditable le met en défaut : +# `__file__` pointe alors vers site-packages, et le corpus de `data/input/` est +# cherché à côté du venv, où il n'est pas. +# +# `VEILLE_RACINE` lève l'ambiguïté. Les déploiements la renseignent ; sans elle, +# le comportement historique est conservé. +_RACINE_PAR_DEFAUT = Path(__file__).resolve().parent.parent +RACINE = Path(os.environ.get("VEILLE_RACINE") or _RACINE_PAR_DEFAUT).resolve() load_dotenv(RACINE / ".env") @@ -43,9 +52,17 @@ CHAPITRES = [chapitre(n) for n in range(11)] DIMENSIONS = [dimension(n) for n in range(1, 13)] # ── Sorties ────────────────────────────────────────────────────────────────── +# +# Les trois chemins de sortie sont configurables par variable d'environnement, +# et acceptent une valeur absolue — `Path("/a") / "/b"` vaut `/b`. +# +# Ce n'est pas de la souplesse gratuite : sur un déploiement YunoHost, la mise +# à jour efface intégralement le répertoire d'installation (`ynh_setup_source +# --full_replace`). Tout ce qui doit survivre — base, cache, export — vit donc +# ailleurs, dans le répertoire de données persistant de l'application. DONNEES = RACINE / "data" BASE_SQLITE = RACINE / os.environ.get("VEILLE_DB", "data/veille.db") -DUMP_JSON = DONNEES / "textes.json" +DUMP_JSON = RACINE / os.environ.get("VEILLE_DUMP_JSON", "data/textes.json") CACHE_HTTP = RACINE / os.environ.get("VEILLE_CACHE", "data/cache_http") MIGRATIONS = Path(__file__).resolve().parent / "migrations"