Projet de traitement et de publication de meilleures données sur les marchés publics attribués en France. Ce projet prend sa source dans la complexité de la publication des données faite par le Ministère des Finances :
- code source de l'agrégation des données fermé
- documentation incomplète et éparpillée
- schéma de données DECP 2 complexe à utiliser
Vous trouverez des informations sur le contexte, le cadre réglementaire et les données de la commande publique sur le wiki.
Ce projet se veut collaboratif et à l'écoute des besoins des usagers potentiels : entreprises, acteurs publics, journalistes, chercheurs et chercheuses, citoyens et citoyennes.
Pour me contacter vous pouvez ouvrir un "issue" sur Github ou me contacter par email [email protected].
Les données produites sont les mêmes données que celles publiées par le Ministère des Finances sur data.economie.gouv.fr. J'ai choisi de prendre ces données comme source et non les DECP au format réglementaire JSON car les premières ont été nettoyées et améliorées (code) par le Ministère, ce qui me fait moins de travail.
Elles sont mises à dispositions aux formats CSV, Parquet et SQLite.
Vous pouvez...
- les télécharger sur data.gouv.fr (vous trouverez aussi plus d'informations sur ces données)
- les visualiséer, les filtrer et télécharger sur decp.info
- Python 3.8 ou plus récent
- cargo (installation rapide)
- fichier .env avec l'adresse des fichiers source
Je vous recommande d'utiliser un environnement virtuel Python pour isoler l'installation des dépendances :
python -m venv .venv
Activez l'environnement virtuel :
source .venv/bin/activate
Installez les dépendances :
pip install .
Installez les dépendances de développement et l'auto-formatage :
pip install .[dev]
pre-commit install
# à chaque commit black et cie se lancent et reformattent les fichiers si besoin, ça peut demander de "git add"
# de nouveau pour prendre en compte le reformatage dans le commit
# installation des dépendances sous zsh
pip install .'[dev]'
Faites une copie de template.env, renommez-la en .env et adaptez les valeurs :
cp template.env .env
nano .env
Ces instructions supposent que le serveur prefect est installé, configuré et démarré.
Il suppose également que le work pool "local" a été créé.
- Suivre les instructions d'installation ci-dessus
- Démarrer le serveur prefect
- Adapter les chemins dans
systemd/prefect-worker.service
- Copier
systemd/prefect-worker.service
dans le répertoire/etc/systemd/system
- Activer le service (pour qu'il soit démarré au démarrage du serveur)
systemctl enable prefect-worker.service
- Démarrer le service
systemctl start prefect-worker.service
Un nouveau worker doit apparaître dans l'interface de gestion de prefect.
Construire et lancer le container
./script/docker_build_and_run.bat
Démarrer le serveur prefect une fois dans le container
./script/start_server_in_docker.sh
Le serveur est accessible sur le navigateur à l'adresse http://127.0.0.1:4200/
Le pré-traitement des données SIRENE doit être fait une fois pour que le traitement principal soit fonctionnel.
pytest tests/test_sirene_preprocess.py
Lancement du traitement principal (datalab + decp.info)
python src/flows.py
Le déploiement sur le serveur déploie à la fois un run quotidien de traitement des données et un run activable à la demande.
Attention, la version de prefect du client utilisé pour le déploiement et celle utilisée pour le serveur doivent être identiques. Cela est normalement garanti par la version configurée dans pyproject.toml
.
- Suivre les instructions de la section "Installation sur le serveur pour les déploiements"
- Vérifier que le
.env
est bien configuré, ce sont ces variables qui seront utilisées par les run du serveur. - Déployer sur le serveur :
python src/deploy.py
- Le run se lancera tous les jours selon la configuration cron. Si tu souhaites exécuter le run maintenant :
prefect deployment run decp-processing
Pour lancer les tests unitaires :
Ce traitement doit être fait une fois pour que le test du traitement principal soit fonctionnel.
pytest tests/test_sirene_preprocess.py
pytest tests/test_main.py