Colin Maudry
e5ca7d62a3
fix: protect wb.close() with try/finally, strengthen width assertions, declare openpyxl dev dep #83
...
- I-1: Add explicit lower bounds to width assertions (>= 15 for autre, >= 40 for objet)
- I-2: Wrap write_excel() and close() in try/finally to ensure cleanup even on exception
- M-2: Add openpyxl to dev dependencies in pyproject.toml
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-23 17:08:32 +02:00
Colin Maudry
35e72645bd
feat: add write_styled_excel utility for styled Excel exports #83
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-23 17:05:55 +02:00
Colin Maudry
39dfa22b0d
Plan : amélioration du style des exports Excel #83
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-23 17:00:28 +02:00
Colin Maudry
96c0b0dd35
fix(tableaux): scroll horizontal via wrapper overflow-x auto #82
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 16:52:22 +02:00
Colin Maudry
10ed9c4c4b
Spec : amélioration du style des exports Excel #83
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-23 16:21:20 +02:00
Colin Maudry
ce4b06fe3d
refactor(tableaux): commentaires et nettoyage table_hscroll.js #82
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 16:14:20 +02:00
Colin Maudry
2413ffb4f0
test(tableaux): barre miroir et en-tête sticky sur /tableau #82
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 16:05:49 +02:00
Colin Maudry
cb1685d055
feat(tableaux): barre de défilement horizontale miroir synchronisée #82
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 16:00:45 +02:00
Colin Maudry
4be82ac76b
feat(tableaux): en-têtes de colonnes collants #82
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 15:58:49 +02:00
Colin Maudry
83d38f8489
Correction du mode d'emploi sur l'accentuation
2026-06-23 15:48:37 +02:00
Colin Maudry
ec2b8389c3
docs: verdict spike DOM tableaux #82
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 15:44:11 +02:00
Colin Maudry
3e305845dd
Fix réduction du nombre de colonne, ajoute de lla colonne Marché #84
2026-06-23 15:28:42 +02:00
Colin Maudry
68bd398759
docs: plan d'implémentation scroll horizontal tableaux #82
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 15:14:03 +02:00
Colin Maudry
0ed807f98c
docs: design scroll horizontal + en-têtes sticky des tableaux #82
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-23 15:08:47 +02:00
Colin Maudry
f94701207b
Fix non split des DISPLAYED_COLUMNS
2026-06-23 14:13:30 +02:00
Colin Maudry
fc22eca661
Changelog 2.8.0
v2.8.0
2026-06-23 07:06:44 +02:00
Colin Maudry
e591c5500f
Petites améliorations du rendu #81
2026-06-22 22:47:37 +02:00
Colin Maudry
074716bc16
feat(observatoire): restructurer tuile en 3 barres
...
- Barre 1 (grise) : % marchés avec champs considérations renseignés
- Barre 2 (rose) : % positifs parmi les marchés renseignés — sociales
- Barre 3 (verte) : % positifs parmi les marchés renseignés — env
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-22 22:21:37 +02:00
Colin Maudry
ae8292d68d
fix(observatoire): filtre renseignées sur != 'Sans objet' plutôt que regex
...
Seule 'Sans objet' est considérée négative parmi les marchés renseignés,
cohérent avec le reste des traitements.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-22 22:02:37 +02:00
Colin Maudry
26455a7616
fix(observatoire): barre renseignée = positifs parmi les marchés renseignés
...
Dénominateur = marchés non-null ; numérateur = marchés positifs (regex).
Label affiché : "parmi les N marchés renseignés".
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-22 21:18:00 +02:00
Colin Maudry
19e181734c
feat(observatoire): ajouter barres 'valeur renseignée' dans tuile considérations
...
Affiche 4 barres groupées par type (sociales/env) : une pour les marchés
avec au moins une considération, une pour ceux qui ont une valeur renseignée
(non nulle, y compris 'Sans objet').
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-22 18:55:38 +02:00
Colin Maudry
8efd9b45eb
fix(observatoire): texte % blanc sur les barres de considérations
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-22 18:46:37 +02:00
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
2ce762b6cc
docs: plan tuile considérations sociales/environnementales
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-22 18:11:45 +02:00
Colin Maudry
826448d6be
docs: spec tuile considérations sociales/environnementales (observatoire)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-22 18:09:05 +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
966d193ec4
test(api): benchmark comparatif decp.info vs data.gouv.fr ( #78 )
...
Requête identique envoyée aux deux APIs (drapeaux d'agrégation nus),
tableau côte à côte + ratio decp/datagouv. Couvre filtres, differs,
agrégation. --url decp.info paramétrable (défaut prod), data.gouv.fr
sans auth.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-22 15:16:35 +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
5166c88b8b
docs: plan d'implémentation parité API decp.info / tabular-api ( #78 )
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-22 13:35:34 +02:00
Colin Maudry
b0fbe89c2c
docs: ajoute la doc Swagger des mots-clés au spec parité API ( #78 )
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-22 13:27:08 +02:00
Colin Maudry
441d36273a
docs: spec parité API decp.info / tabular-api data.gouv.fr ( #78 )
...
Opérateurs manquants : differs + agrégation (groupby/count/sum/avg/min/max),
renommage du param réservé count -> count_results. or hors périmètre.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-22 13:22:49 +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
d591d7f47a
Merge branch 'feature/78_api' into dev
2026-06-12 20:26:30 +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