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
755b8c13ab
Bug nom colonne, amélioration test #76
2026-05-05 14:56:59 +02:00
Colin Maudry
f4b57dbe5c
Gestion des filtres de dates comme du texte #76
2026-05-05 14:08:50 +02:00
Colin Maudry
10f24dec30
Petites corrections
2026-04-24 12:08:48 +02:00
Colin Maudry
fc4d965b20
Spinner de chargemetn sur la préviusalisation des données
2026-04-23 12:33:30 +02:00
Colin Maudry
a715140af0
test(observatoire): intégration DuckDB pour prepare_dashboard_data ( #72 )
2026-04-23 00:07:24 +02:00
Colin Maudry
0777153c82
refactor(observatoire): prepare_dashboard_data utilise DuckDB ( #72 )
2026-04-22 23:55:45 +02:00
Colin Maudry
6e670c97c9
feat(observatoire): filtres montant min/max ( #72 )
2026-04-22 23:53:43 +02:00
Colin Maudry
522c467702
feat(observatoire): filtres liste via list_has_any ( #72 )
2026-04-22 23:49:32 +02:00
Colin Maudry
74ae1fb008
feat(observatoire): IN départements et skip conditionnel par ID ( #72 )
2026-04-22 23:43:55 +02:00
Colin Maudry
e3a0fba4df
feat(observatoire): filtres LIKE/ILIKE dans dashboard_filters_to_sql ( #72 )
2026-04-22 23:42:43 +02:00
Colin Maudry
a382370767
feat(observatoire): filtres d'égalité simples dans dashboard_filters_to_sql ( #72 )
2026-04-22 23:39:13 +02:00
Colin Maudry
653999693c
feat(observatoire): squelette de dashboard_filters_to_sql ( #72 )
2026-04-22 23:36:59 +02:00
Colin Maudry
3532a9c381
Path de duckdb configurable, correction des tests #72
2026-04-22 20:43:38 +02:00
Colin Maudry
b4956c34d1
Utilisation d'une seule fonction postprocess #72
2026-04-22 18:30:36 +02:00
Colin Maudry
1e67d329d0
perf(tableau): pousser filtre/tri/pagination/comptage dans DuckDB
...
Remplace le chemin lent de prepare_table_data (chargement de toutes les
lignes depuis DuckDB puis filtrage/post-traitement Polars avant slice)
par _fetch_page_sql qui pousse filtre, tri, pagination et comptage dans
DuckDB via filter_query_to_sql / sort_by_to_sql, puis post-traite
uniquement la page de 20 lignes.
Supprime _load_filter_sort_postprocess (plus utilisé). Met à jour les
tests test_table.py en supprimant les tests associés et en ajoutant
des tests dédiés pour _fetch_page_sql. Corrige le fixture flask_app
pour utiliser src.utils.cache (même instance que le module) afin que
@cache.memoize() fonctionne.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-21 23:53:45 +02:00
Colin Maudry
4e25ff5c85
feat(table): ajouter postprocess_page pour post-traiter une page seule
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-21 23:42:52 +02:00
Colin Maudry
cdb6a70f7a
feat(db): ajouter count_marches, count_unique_marches et paramètre offset à query_marches
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-21 23:39:51 +02:00
Colin Maudry
95c90e319e
feat: ajouter traducteurs filter_query→SQL et sort_by→SQL
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-21 23:33:49 +02:00
Colin Maudry
a906a40b7b
Fix import src.utils.cache
2026-04-21 17:21:32 +02:00
Colin Maudry
5151b32f3e
tests/auth/test_csrf.py : vérifie que CSRF est actif ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 22:56:58 +02:00
Colin Maudry
49bd1b3036
src/auth/routes.py : route /auth/change-password ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 22:51:40 +02:00
Colin Maudry
6b78abb7fd
src/auth/routes.py : routes de réinitialisation du mot de passe ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 22:50:20 +02:00
Colin Maudry
ff9b3a6092
src/auth/routes.py : routes /auth/login et /auth/logout ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 17:39:59 +02:00
Colin Maudry
4d9a300e0c
src/auth/routes.py : route /auth/verify-email ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 17:38:13 +02:00
Colin Maudry
e275f10dbd
src/auth/routes.py : route /auth/signup ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 17:37:15 +02:00
Colin Maudry
1c0fb0a960
src/auth/routes.py : blueprint auth et fixtures de test ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 17:35:06 +02:00
Colin Maudry
8896726e09
src/app.py : initialisation de l'authentification au démarrage ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 17:34:12 +02:00
Colin Maudry
a02a9df081
src/auth/setup.py : init_auth et helper safe_next ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 17:32:32 +02:00
Colin Maudry
7976257029
src/auth/mailer.py : envoi d'emails HTML+texte ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 17:31:00 +02:00
Colin Maudry
72fd495c5b
src/auth/models.py : classe User Flask-Login ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 17:25:56 +02:00
Colin Maudry
92fe76d072
src/auth/tokens.py : génération et validation des tokens ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 17:24:49 +02:00
Colin Maudry
1a07e5ac0f
src/auth/db.py : CRUD tokens de vérification et reset ( #73 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 17:23:02 +02:00
Colin Maudry
ae4a206de7
src/auth/db.py : CRUD users ( #73 )
2026-04-20 17:19:52 +02:00
Colin Maudry
5c6e75e3d3
src/auth/db.py : schéma SQLite et connexion ( #73 )
2026-04-20 17:15:26 +02:00
Colin Maudry
e44fe452b2
Corrections de typage et d'appels à filter_table_data
2026-04-19 23:55:20 +02:00
Colin Maudry
7aef7acd34
Petits ajustements (cache => utils, noms de variables)
2026-04-19 23:49:02 +02:00
Colin Maudry
b0d2aca4ff
perf(tableau): memoize filter+sort+postprocess pipeline ( #72 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 22:50:32 +02:00
Colin Maudry
0abbd982ea
feat: add memoized _load_filter_sort_postprocess helper ( #72 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 22:39:13 +02:00
Colin Maudry
18d07b5398
feat: add normalize_sort_by hashable cache-key helper ( #72 )
...
Add normalize_sort_by function to convert Dash DataTable's sort_by list
(unhashable) into a tuple representation (hashable) for use in cache keys.
Includes TDD-driven tests for empty inputs, hashability, and order preservation.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 22:36:55 +02:00
Colin Maudry
0c7ca04f8e
refactor: move track_search out of filter_table_data into callers ( #72 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 22:32:28 +02:00
Colin Maudry
89904a5bad
test: scaffold unit tests for table utilities ( #72 )
2026-04-19 22:30:28 +02:00
Colin Maudry
4c4b010f44
Correction des tests avec données db
2026-04-18 21:39:36 +02:00
Colin Maudry
94ff13a66b
test: reconstruction de la base DuckDB de test avant chaque session ( #71 )
2026-04-16 11:04:44 +02:00
Colin Maudry
cfd0da34cd
test(db): sérialisation des builds concurrents par fcntl.flock ( #71 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-15 16:27:41 +02:00
Colin Maudry
f31522734c
Connexion DuckDB globale, verrou fcntl et query_marches
...
- _ensure_database : vérifie rebuild sous verrou fcntl exclusif
- conn en lecture seule au niveau module, schema importé via SELECT LIMIT 0
- query_marches : helper SQL paramétré retournant un pl.DataFrame
- get_cursor : cursor par appel pour thread-safety Dash
- pyarrow ajouté en dépendance (requis par duckdb .pl())
refs #71
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-15 16:23:09 +02:00
Colin Maudry
077af6dd2e
Implémentation de build_database avec transforms Polars et tables dérivées
...
- _load_source_frame reprend la pipeline Polars (sort, filtre donneesActuelles,
booleans_to_strings, remplacement des noms null)
- build_database utilise write_parquet + read_parquet pour zéro-dépendance
pyarrow (pyarrow absent du venv) et écrit atomiquement via .tmp + os.replace
- 4 tables dérivées : acheteurs_marches, titulaires_marches,
acheteurs_departement, titulaires_departement
refs #71
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-15 16:16:12 +02:00
Colin Maudry
553e23dd98
Nettoyage des tests should_rebuild suite à la revue
...
- Import de should_rebuild au niveau module
- Suppression d'un setenv DEVELOPMENT inutile (branche db-missing)
- Utilisation de os.utime pour un ordre mtime déterministe
refs #71
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-15 16:10:17 +02:00