diff --git a/CHANGELOG.md b/CHANGELOG.md index 26564e7..de1d145 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +#### 2.7.2 (19 avril 2026) + +- 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) + #### 2.7.1 (23 mars 2026) - Correction du partage de données filtrées entre dashboard et vue des données @@ -182,7 +190,7 @@ ### 1.0.0 -- publication sur https://decp.info +- publication sur - ajout d'une vue équivalente au format DECP réglementaire - personnalisation de datasette - script de conversion quotidien basé sur [dataflows](https://github.com/datahq/dataflows) diff --git a/README.md b/README.md index 2eaa3f6..8ed961d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # decp.info -> v2.7.1 +> v2.7.2 > Outil d'exploration et de téléchargement des données essentielles de la commande publique. => [decp.info](https://decp.info) diff --git a/pyproject.toml b/pyproject.toml index 0ed7f4a..3fbce4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "decp.info" description = "Interface d'exploration et d'analyse des marchés publics français." -version = "2.7.1" +version = "2.7.2" requires-python = ">= 3.10" authors = [{ name = "Colin Maudry", email = "colin@colmo.tech" }] dependencies = [ @@ -14,7 +14,7 @@ dependencies = [ "xlsxwriter", "plotly[express]", "httpx", - "pandas", # utilisé pour la création de certains graphiques + "pandas", # utilisé pour la création de certains graphiques "unidecode", "dash-leaflet", "dash-extensions", diff --git a/src/app.py b/src/app.py index d3a2777..eb3b332 100644 --- a/src/app.py +++ b/src/app.py @@ -1,4 +1,5 @@ import os +from shutil import rmtree import dash_bootstrap_components as dbc import tomllib @@ -32,15 +33,17 @@ app: Dash = Dash( meta_tags=META_TAGS, ) +rmtree(os.getenv("CACHE_DIR", "/tmp/decp-cache")) + cache.init_app( app.server, config={ "CACHE_TYPE": "FileSystemCache", "CACHE_DIR": os.getenv("CACHE_DIR", "/tmp/decp-cache"), "CACHE_DEFAULT_TIMEOUT": int( - os.getenv("CACHE_DEFAULT_TIMEOUT", 3600 * 20) - ), # 20h par défaut - "CACHE_THRESHOLD": 500, + os.getenv("CACHE_DEFAULT_TIMEOUT", 3600 * 24) + ), # 24h par défaut + "CACHE_THRESHOLD": 300, }, ) diff --git a/src/db.py b/src/db.py index 476341a..646fc25 100644 --- a/src/db.py +++ b/src/db.py @@ -126,7 +126,7 @@ def _ensure_database() -> Path: if should_rebuild(db_path, parquet_path): build_database(db_path, parquet_path) else: - logger.info("Base de données déjà disponible et à jour.") + logger.debug("Base de données déjà disponible et à jour.") return db_path diff --git a/src/pages/observatoire.py b/src/pages/observatoire.py index 3f0d5a8..b3afc84 100644 --- a/src/pages/observatoire.py +++ b/src/pages/observatoire.py @@ -657,15 +657,15 @@ def _normalize_filter_params(filter_params: dict) -> tuple: ) -@cache.memoize(timeout=3600) +@cache.memoize() def _compute_dashboard_children(cache_key: tuple): + logger.debug("Cache miss — computing dashboard") filter_params = {k: (list(v) if isinstance(v, tuple) else v) for k, v in cache_key} lff: pl.LazyFrame = query_marches().lazy() lff = prepare_dashboard_data(lff=lff, **filter_params) dff = lff.collect(engine="streaming") - logger.debug("Filter data: " + str(dff.height)) df_per_uid = ( dff.select("uid", "montant").group_by("uid").agg(pl.col("montant").first()) diff --git a/uv.lock b/uv.lock index fa799ff..b2ced7c 100644 --- a/uv.lock +++ b/uv.lock @@ -760,7 +760,7 @@ wheels = [ [[package]] name = "decp-info" -version = "2.7.1" +version = "2.7.2" source = { virtual = "." } dependencies = [ { name = "dash", extra = ["compress"] },