Skip to content

dataforgoodfr/Democracy-Watch

Repository files navigation

Assemblée Nationale

TODO: petite présentation du projet.

Description des données

Nous utilisons l'API des tricoteuses pour récupérer les données. Voici le lien vers la documentation.

L'Assemblée nationale travaille à partir de dossiers législatifs. Un dossier législatif permet de suivre l'évolution d'un texte législatif : en commission, au Sénat, amendements... Deux types de textes législatifs nous intéressent : proposition de loi proposée par un député, projet de loi proposé par le gouvernement.

Voici les différents endpoint:

  • dossiers => https://parlement.tricoteuses.fr/dossiers
  • texte de loi => https://parlement.tricoteuses.fr/documents
  • amendements => https://parlement.tricoteuses.fr/amendements
  • députés => https://parlement.tricoteuses.fr/acteurs
  • votes => https://parlement.tricoteuses.fr/scrutins

L'API propose de nombreux endpoints.

Information sur le chemin d'une loi Les documents parlementaires

Documentation technique de l'API des tricoteuses

Contributing

Installation

Dépendances à installer

Setup

uv sync

Usages

Exécuter des commandes

Il y a deux façons d'exécuter des commandes:

  • uv run main.py [-h] [-d] [-r] [-e] [-a]
  • just

Just permet de facilement exécuter des commandes. Si vous ne voulez pas l'installer, vous pouvez toujours utiliser uv run main.py

Télécharger les données sur l'API des tricoteuses

La commande suivante va télécharger sur l'API des tricoteuses et créer des fichiers JSON dans le répertoire ./data/. Pour rajouter un endpoint, il suffit de modifier la variable APIS dans ./etl/download.py

uv run main.py -d
# ou
just download

Construire la base de donnée

uv run main.py -r
# ou
just db-rebuild

Exécuter l'ETL

uv run main.py -e
# ou
just etl

Recréer la DB et exécuter l'ETL

uv run main.py -a
# ou
just all

Comment marche l'ETL

Après avoir exécuté just download, les données de l'API des tricoteuses sont sauvegardées dans le dossier ./data/ sous la forme de fichiers JSON. L'ETL permet d'extraire des données de ces fichiers pour les sauvegarder dans la base de données. La base de données est représentée à l'aide de modèles créés via SqlAlchemy.

Pour charger un fichier en db, il faut rajouter un modèle qui porte le même nom que le fichier sans l'extension. Pour rajouter un champ du json dans la table, il faut rajouter une colonne dans le modèle du même type que le json et du même nom.

L'ETL est capable d'inférer à partir des modèles les fichiers à ouvrir et les champs à charger.

Exemple

Voici une partie du fichier ./data/dossiers.json

  {
    "uid": "DLR5L17N54464",
    "dataset": 17,
    "chambre": "AN",
    "numero": "4464",
    ...
    }

Je veux rajouter le champ chambre dans la DB et faire en sorte que l'ETL l'ajoute de lui-même.

  1. Rajouter le champ dans le modèle
class User(Base):
    __tablename__ = "dossiers"

    uid: Mapped[str] = mapped_column(primary_key=True)
    titre: Mapped[str] = mapped_column(String(500))
    dataset: Mapped[int]
    chambre: Mapped[str] = mapped_column(String(5)) # <-------- nouvelle colonne qui porte le même nom que le champ du fichier json

Le champ doit porter le même nom sinon l'ETL ne sera pas capable de le trouver.

  1. Exécuter just all

About

No description, website, or topics provided.

Resources

License

Stars

2 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors