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
3ce6f224ae
rtk, uv, pyproject
2026-04-19 23:39:33 +02:00
Colin Maudry
c7c7c2c62c
Factorisation des opération de postprocess des tables
2026-04-19 23:28:45 +02:00
Colin Maudry
ad58c1152a
Améliorations sur le typage
2026-04-19 23:23:07 +02:00
Colin Maudry
19449969d6
Mention de rtk dans CLAUDE.md
2026-04-19 23:22:48 +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
ff425108b0
fix: restore track_search import in table.py ( #72 )
2026-04-19 22:34:25 +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
4d0baebb75
Vérification de l'existence de cache_dir
v2.7.2
2026-04-19 15:54:36 +02:00
Colin Maudry
5ccfec35e9
Merge tag 'v2.7.2' into dev
...
- Chargement des données depuis une base DuckDB plutôt qu'en mémoire (plus de stabilité) ([#71 ](https://github.com/ColinMaudry/decp.info/issues/71 ))
- Mise en cache des vue sur l'observatoire pour un chargement plus rapide (remise à zéro quotidienne)
- Correction de bug : la liste de colonnes par défaut est bien appliquée plutôt qu'afficher toutes les colonnes
- Quelques corrections de bugs d'affichage
- Refactorisation des fonctions utilitaires (`utils.py` approchait des 1 000 lignes)
2026-04-19 15:33:58 +02:00
Colin Maudry
38f7543205
Merge branch 'release/2.7.2'
2026-04-19 15:32:41 +02:00
Colin Maudry
26169abc2f
Suppression du cache à chaque redémarrage
2026-04-19 15:29:34 +02:00
Colin Maudry
1eb579da57
Logging des cache miss si DEVELOPMENT
2026-04-19 15:23:02 +02:00
Colin Maudry
1f5ffe2962
Changelog 2.7.2
2026-04-19 15:22:09 +02:00
Colin Maudry
4c4b010f44
Correction des tests avec données db
2026-04-18 21:39:36 +02:00
Colin Maudry
9d9760e596
Cache
2026-04-18 20:06:46 +02:00
Colin Maudry
a7516d65e3
Utilisation du logger global dans app et db
2026-04-18 19:28:34 +02:00
Colin Maudry
600567330f
Améliorations typing
2026-04-18 19:01:22 +02:00
Colin Maudry
af3b3464e4
Refactorisation utils
2026-04-18 19:01:07 +02:00
Colin Maudry
e4e1438220
Refactorisation des fonctions utils
2026-04-18 18:33:09 +02:00
Colin Maudry
e352624c02
Capitalisation des constantes
2026-04-18 18:09:42 +02:00
Colin Maudry
accdfe1384
Merge branch 'feat/duckdb-migration' into dev
2026-04-18 16:57:45 +02:00
Colin Maudry
da13ed7984
DuckDB migration design spec #71
2026-04-18 16:57:41 +02:00
Colin Maudry
035e6b7ac3
Formatage prettier (reformatage automatique)
2026-04-16 11:13:08 +02:00
Colin Maudry
71f21b733f
Mesure de l'impact mémoire post-migration DuckDB ( #71 )
2026-04-16 11:12:50 +02:00
Colin Maudry
09ddb0f485
Suppression des dataframes globaux remplacés par DuckDB ( #71 )
2026-04-16 11:11:58 +02:00
Colin Maudry
342f7b53a9
figures.py : remplacement de df.columns par schema.names() depuis src.db ( #71 )
2026-04-16 11:09:43 +02:00
Colin Maudry
88016d9517
observatoire.py : migration vers query_marches et schema depuis src.db ( #71 )
2026-04-16 11:09:22 +02:00
Colin Maudry
5ecfb463f3
tableau.py : migration vers query_marches et schema depuis src.db ( #71 )
2026-04-16 11:08:45 +02:00
Colin Maudry
1655af375c
arbre/liste_marches_org.py : requêtes DuckDB pour les listes de marchés ( #71 )
2026-04-16 11:07:59 +02:00
Colin Maudry
cba3128b8f
departement.py : requêtes DuckDB sur acheteurs_departement et titulaires_departement ( #71 )
2026-04-16 11:07:32 +02:00
Colin Maudry
a31d996812
titulaire.py : migration vers query_marches et schema depuis src.db ( #71 )
2026-04-16 11:07:07 +02:00
Colin Maudry
e89311f3ab
acheteur.py : migration vers query_marches et schema depuis src.db ( #71 )
2026-04-16 11:06:35 +02:00
Colin Maudry
31b68079e0
marche.py : utilisation de query_marches au lieu du df global ( #71 )
2026-04-16 11:05:52 +02:00
Colin Maudry
9cf92563ae
Intégration de src.db dans utils (coexistence avec les globaux) ( #71 )
2026-04-16 11:05:18 +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
4715db282e
Les boutons de Tableau passent à ligne si écran plus étroit
2026-04-15 17:49:25 +02:00
Colin Maudry
2d592842ab
Suppression print/logs inutiles
2026-04-15 16:33:57 +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
Colin Maudry
e83df64261
Ajout de src.db.should_rebuild et ses tests
...
refs #71
2026-04-15 16:07:41 +02:00
Colin Maudry
0c3b0265b4
Ajout de la dépendance duckdb
...
Ajoute duckdb (==1.5.2) à pyproject.toml et ignore les artefacts
runtime (decp.duckdb, .tmp, .lock) qui sont régénérés au démarrage
depuis decp_prod.parquet.
refs #71
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-15 16:03:06 +02:00
Colin Maudry
fd1a801ddb
Ignore .worktrees pour exécution en worktree isolé
...
refs #71
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-15 13:50:31 +02:00
Colin Maudry
035d7f23fa
Plan de migration DuckDB — découpage en 20 tâches
...
20 étapes bite-sized couvrant : dépendance duckdb + .gitignore,
should_rebuild (TDD), build_database avec transforms Polars et verrou
fcntl, startup guard + query_marches, migration page-par-page
(marche → acheteur → titulaire → arbre → tableau → observatoire →
figures), suppression des globaux Polars, mesure RSS avant/après.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-15 13:37:49 +02:00