Commit Graph

653 Commits

Author SHA1 Message Date
Colin Maudry eab06eedae fix(observatoire): couleurs barres considérations palette Plotly Safe
Utilise les codes hex #CC6677 (sociales) et #117733 (env) via le prop
color de dbc.Progress, qui accepte les valeurs hex.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 18:45:33 +02:00
Colin Maudry 5586db23aa feat(observatoire): afficher la tuile considérations après Type d'achat
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 18:17:27 +02:00
Colin Maudry a85baca408 feat(observatoire): calcul et rendu tuile considérations sociales/env
Ajoute compute_considerations_stats (dédoublonnage par uid, regex
Clause|Critère|Marché réservé, colonne absente → 0%) et
get_considerations_card_content (deux dbc.Progress colorés Safe).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 18:16:34 +02:00
Colin Maudry e44af8add8 Dans les résultats de recherche, le contenu de la colonne Département wrappe le texte #77 2026-06-22 17:55:53 +02:00
Colin Maudry 992f6d4f93 Recherche dans les tableaux insensible aux accents #79 2026-06-22 17:46:31 +02:00
Colin Maudry c264c36684 fix(api): next=null sur dernière page en mode agrégation (#78)
Si la page retournée est partielle (len < page_size), on sait qu'on est
sur la dernière page → next=null, parité data.gouv.fr.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 14:23:09 +02:00
Colin Maudry 70ee819a51 feat(api): sort supporté sur colonnes groupby en mode agrégation (#78)
Testé contre tabular-api data.gouv.fr : sort sur une colonne groupby
est honoré (200), sort sur un alias d'agrégat retourne 400 (colonne
inconnue). aggregate_marches reçoit order_by ; doc Swagger mise à jour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 14:20:02 +02:00
Colin Maudry b87eb4328c docs(api): documente les opérateurs (filtres + agrégation) dans Swagger (#78)
Remplace la description du paramètre <colonne>__<opérateur> par une
documentation complète listant tous les opérateurs de filtre (exact, differs,
contains, notcontains, in, notin, less, greater, strictly_less,
strictly_greater, isnull, isnotnull, sort) et les agrégations (groupby, count,
sum, avg, min, max).

Met à jour le docstring de data() pour documenter le mode agrégation et les
paramètres réservés.

Ajoute test_openapi_doc.py qui valide la présence des mots-clés clés dans
l'OpenAPI généré.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 14:09:34 +02:00
Colin Maudry 7c9a95355b feat(api): mode agrégation sur /data (groupby + agrégats) (#78) 2026-06-22 14:06:44 +02:00
Colin Maudry 28709a162a feat(db): aggregate_marches pour les requêtes GROUP BY (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 14:04:08 +02:00
Colin Maudry 9324a734d4 feat(api): parsing des opérateurs d'agrégation (groupby/count/sum/avg/min/max) (#78) 2026-06-22 13:59:50 +02:00
Colin Maudry 2a8e82ccd6 feat(api): ajoute l'opérateur de filtre differs (IS DISTINCT FROM) (#78)
Implémente l'opérateur de filtre `differs` qui génère un fragment SQL
`IS DISTINCT FROM` pour exclure des valeurs en tenant compte des NULL.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 13:55:18 +02:00
Colin Maudry f5db674e22 feat(api): renomme le param réservé count en count_results (#78)
- Renomme RESERVED_PARAMS dans src/api/filters.py
- Fait passer le paramètre de 'count' à 'count_results' dans src/api/routes.py
- Met à jour la documentation swagger pour le nouveau nom

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 13:50:12 +02:00
Colin Maudry ffaf200c07 api/v1/schema n'est plus auth, schema renvoie table schema, adaptation des tests #78 2026-06-16 17:03:14 +02:00
Colin Maudry fede22f314 Plus d'options dans swagger UI pour Try it out #78 2026-06-16 11:06:46 +02:00
Colin Maudry b8d73c7f7b fix: omettre temporalCoverage si date inconnue + TimeoutException explicite (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 17:58:23 +02:00
Colin Maudry cb93dbe05a feat: chargements de pages best-effort au boot (tableau, sources) (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 13:58:50 +02:00
Colin Maudry fa2709b38c fix: re-vérifier db_path.exists() dans le handler et assertion return value (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 13:50:57 +02:00
Colin Maudry bba53d81e1 feat: réutiliser le DuckDB existant si le bootstrap échoue (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 13:48:32 +02:00
Colin Maudry 5a6aa31c86 fix: robustesse schéma — TransportError, validation name, ValueError cache (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 13:28:36 +02:00
Colin Maudry 42ba73cd36 feat: schéma résilient URL→cache + suppression DATA_SCHEMA_LOCAL (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 13:26:03 +02:00
Colin Maudry 1aea71be7f Merge branch 'main' into feature/78_api 2026-06-12 09:33:59 +02:00
Colin Maudry ed32b0f66b Réduction des petites erreurs qui polluent les logs 2026-06-07 18:56:16 +02:00
Colin Maudry 4d3e8ac344 feat(etapes): fiches cliquables sur les barres et vue mobile 2026-06-04 22:15:10 +02:00
Colin Maudry ab74717679 feat(etapes): suppression légende, JAL à la place de Journaux d'annonces légales 2026-06-04 22:04:31 +02:00
Colin Maudry c9a97fe9d2 feat(etapes): référencement de /etapes dans le sitemap 2026-06-04 21:51:30 +02:00
Colin Maudry b8db0cddf8 feat(etapes): styles du graphique étapes/seuils 2026-06-04 21:48:28 +02:00
Colin Maudry 4c60fed0c2 feat(etapes): vue mobile liste par étape
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 21:45:25 +02:00
Colin Maudry 070a91fed1 feat(etapes): graphique données par étape et par seuil 2026-06-04 21:42:33 +02:00
Colin Maudry e638ce45be feat(etapes): squelette de la page /etapes 2026-06-04 21:38:50 +02:00
Colin Maudry e55f3447db Possibilité de charger les données depuis une URL, memoisation de last_modified 2026-06-04 21:34:36 +02:00
Colin Maudry 7d4df0e6ad Récupération de schéma plus robuste et changelog 2026-05-18 12:16:03 +02:00
Colin Maudry 8dc5287918 Ajouts à flask #78 2026-05-18 11:47:05 +02:00
Colin Maudry 63f51d7b98 API: mention sur la page À propos (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:47:03 +02:00
Colin Maudry 2f0cbada34 API: corriger flush() et isolation test compteur (#78) 2026-05-13 14:45:26 +02:00
Colin Maudry c683034e2b API: documentation OpenAPI et CHANGELOG (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:37:21 +02:00
Colin Maudry 985af0fdc7 API: envoi Matomo fire-and-forget en async (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:34:52 +02:00
Colin Maudry 912507b1d9 API: compteur de consommation SQLite asynchrone (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:31:22 +02:00
Colin Maudry 6c591aeb08 API: endpoint /data avec pagination et filtres (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:15:19 +02:00
Colin Maudry 6f4e7f1853 API: endpoint /schema (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:10:20 +02:00
Colin Maudry 686218c639 API: branchement init_api dans l'app Dash (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:07:47 +02:00
Colin Maudry f24d0ba168 API: blueprint flask-smorest + endpoint /health (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 13:52:06 +02:00
Colin Maudry f12ada2fac API: décorateur @require_token (#78) 2026-05-13 13:49:01 +02:00
Colin Maudry a3cfad3d8f API: parser de filtres et génération SQL paramétré (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 13:45:55 +02:00
Colin Maudry 4b67cde147 API: CLI tokens_cli (create/list/revoke) (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 13:34:05 +02:00
Colin Maudry ca44b99016 API: tokens_db SQLite CRUD (#78) 2026-05-13 13:19:50 +02:00
Colin Maudry bc3b09e2a9 API: dépendances et squelette de package (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 13:04:09 +02:00
Colin Maudry 0c9666204b Autorisation du HTML dans les annonces 2026-05-11 10:34:06 +02:00
Colin Maudry 8a2f7f620c Suppression des mentions sur les profils d'acheteurs qui ne publient pas de données
Omnikles publie via l'API DUME de l'AIFE, ne reste que Klekoon. Mais bon, ça fait des mauvaises vibes sur la page de le préciser :)
2026-05-11 10:26:16 +02:00
Colin Maudry 3a73cdf4b9 P dans les announcements plus compacts 2026-05-05 15:43:08 +02:00