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)
This commit is contained in:
+9
-1
@@ -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 <https://decp.info>
|
||||
- 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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
+2
-2
@@ -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",
|
||||
|
||||
+6
-3
@@ -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,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user