Skip to content

Add Amendement model and preserve analysis tables on rebuild#4

Closed
DavidNO wants to merge 3 commits into
mainfrom
add-amendements-model
Closed

Add Amendement model and preserve analysis tables on rebuild#4
DavidNO wants to merge 3 commits into
mainfrom
add-amendements-model

Conversation

@DavidNO

@DavidNO DavidNO commented Jul 11, 2026

Copy link
Copy Markdown
Collaborator

Contexte

Premier socle DB pour le POC d'analyse des amendements. Objectif : pouvoir ingérer les amendements bruts et pouvoir y greffer plus tard des tables d'analyse (mentions « travaillé avec… », similarité, sémantique) sans perdre les résultats d'analyse à chaque rebuild

Changements

  • Modèle Amendement (models/amendement.py) : table brute amendements. Champs issus directement de l'endpoint Tricoteuses /amendements, regroupés en 6 catégories (identité, texte, auteur/signataires, rattachement, statut/sort, dates). Les noms de colonnes sont en camelCase pour matcher 1:1 les clés du JSON → chargés tels quels par l'ETL existant. Seul uid est non nullable ; le reste est nullable (amendements hétérogènes : budgétaires, sous-amendements).
  • Rebuild scopé (etl/database.py) : create_db() ne drop/recrée que les tables listées dans ETL_TABLES (dossiers, amendements). Les futures tables d'analyse ne sont ni détruites au rebuild, ni parcourues par la boucle ETL (get_tables_definition() est également restreint). create_all reste idempotent.
  • .env.example : câblage de l'ETL sur le Postgres local du docker-compose.yml.

Notes de revue

  • Les *RefUid (acteur, organe, dossier, document…) sont conservés en colonnes texte non contraintes (références molles), volontairement : on n'ingère les entités liées que quand une analyse le demandera.
  • Les dates sont stockées en texte (l'ETL insère les valeurs JSON brutes).

Vérifications

  • Modèle chargé et schéma SQLAlchemy compilé (28 colonnes, uid PK).
  • Résolution des tables ETL scopée correcte (dossiers, amendements).
  • Toutes les colonnes du modèle existent bien dans le JSON réel de l'API (échantillon législature 17) ; exposeSommaire renseigné.
  • ruff check + ruff format.
  • ETL de bout en bout contre Postgres 15 : 500 dossiers + 1000 amendements chargés, champs clés remplis, 0 doublon uid, idempotence du re-ETL confirmée (on_conflict_do_nothing), drop sélectif OK.

Correctif inclus

  • PG_ECHO (etl/database.py) : bool(getenv("PG_ECHO", False)) était toujours vrai (getenv renvoie une chaîne, bool("False") == True), l'echo SQL restait donc toujours actif. Parsing explicite du flag. Vérifié sur données réelles : ETL de bout en bout OK (500 dossiers + 1000 amendements chargés, idempotence confirmée, 0 doublon).

DavidNO added 3 commits July 11, 2026 18:25
Introduce the raw `amendements` table (fields sourced directly from the
Tricoteuses /amendements endpoint, grouped into identity, text, author,
attachment, status and dates). Column names mirror the JSON keys so the
existing schema-driven ETL loads them without changes.

Scope the rebuild to ETL-managed tables (ETL_TABLES) so future analysis
tables are neither dropped by `create_db` nor treated as source files by
the ETL loop. This lets analysis results survive a re-download without
introducing Alembic.

Add `.env.example` wiring the ETL to the local docker-compose Postgres.
getenv returns a string, so bool(getenv("PG_ECHO", False)) was truthy for
any non-empty value including "False", leaving SQL echo permanently on.
Parse the flag explicitly instead.
@DavidNO

DavidNO commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

Consolidé dans #8 : le modèle amendements et la préservation des tables d'analyse au rebuild sont désormais inclus dans le PR #8, qui crée tout l'ETL (dossiers, amendements + objets parlementaires) en une seule fois vers main. La branche add-amendements-model est conservée.

@DavidNO DavidNO closed this Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant