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)
|
#### 2.7.1 (23 mars 2026)
|
||||||
|
|
||||||
- Correction du partage de données filtrées entre dashboard et vue des données
|
- Correction du partage de données filtrées entre dashboard et vue des données
|
||||||
@@ -182,7 +190,7 @@
|
|||||||
|
|
||||||
### 1.0.0
|
### 1.0.0
|
||||||
|
|
||||||
- publication sur https://decp.info
|
- publication sur <https://decp.info>
|
||||||
- ajout d'une vue équivalente au format DECP réglementaire
|
- ajout d'une vue équivalente au format DECP réglementaire
|
||||||
- personnalisation de datasette
|
- personnalisation de datasette
|
||||||
- script de conversion quotidien basé sur [dataflows](https://github.com/datahq/dataflows)
|
- script de conversion quotidien basé sur [dataflows](https://github.com/datahq/dataflows)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# decp.info
|
# decp.info
|
||||||
|
|
||||||
> v2.7.1
|
> v2.7.2
|
||||||
> Outil d'exploration et de téléchargement des données essentielles de la commande publique.
|
> Outil d'exploration et de téléchargement des données essentielles de la commande publique.
|
||||||
|
|
||||||
=> [decp.info](https://decp.info)
|
=> [decp.info](https://decp.info)
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "decp.info"
|
name = "decp.info"
|
||||||
description = "Interface d'exploration et d'analyse des marchés publics français."
|
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"
|
requires-python = ">= 3.10"
|
||||||
authors = [{ name = "Colin Maudry", email = "colin@colmo.tech" }]
|
authors = [{ name = "Colin Maudry", email = "colin@colmo.tech" }]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
|||||||
+6
-3
@@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
from shutil import rmtree
|
||||||
|
|
||||||
import dash_bootstrap_components as dbc
|
import dash_bootstrap_components as dbc
|
||||||
import tomllib
|
import tomllib
|
||||||
@@ -32,15 +33,17 @@ app: Dash = Dash(
|
|||||||
meta_tags=META_TAGS,
|
meta_tags=META_TAGS,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
rmtree(os.getenv("CACHE_DIR", "/tmp/decp-cache"))
|
||||||
|
|
||||||
cache.init_app(
|
cache.init_app(
|
||||||
app.server,
|
app.server,
|
||||||
config={
|
config={
|
||||||
"CACHE_TYPE": "FileSystemCache",
|
"CACHE_TYPE": "FileSystemCache",
|
||||||
"CACHE_DIR": os.getenv("CACHE_DIR", "/tmp/decp-cache"),
|
"CACHE_DIR": os.getenv("CACHE_DIR", "/tmp/decp-cache"),
|
||||||
"CACHE_DEFAULT_TIMEOUT": int(
|
"CACHE_DEFAULT_TIMEOUT": int(
|
||||||
os.getenv("CACHE_DEFAULT_TIMEOUT", 3600 * 20)
|
os.getenv("CACHE_DEFAULT_TIMEOUT", 3600 * 24)
|
||||||
), # 20h par défaut
|
), # 24h par défaut
|
||||||
"CACHE_THRESHOLD": 500,
|
"CACHE_THRESHOLD": 300,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ def _ensure_database() -> Path:
|
|||||||
if should_rebuild(db_path, parquet_path):
|
if should_rebuild(db_path, parquet_path):
|
||||||
build_database(db_path, parquet_path)
|
build_database(db_path, parquet_path)
|
||||||
else:
|
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
|
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):
|
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}
|
filter_params = {k: (list(v) if isinstance(v, tuple) else v) for k, v in cache_key}
|
||||||
|
|
||||||
lff: pl.LazyFrame = query_marches().lazy()
|
lff: pl.LazyFrame = query_marches().lazy()
|
||||||
lff = prepare_dashboard_data(lff=lff, **filter_params)
|
lff = prepare_dashboard_data(lff=lff, **filter_params)
|
||||||
|
|
||||||
dff = lff.collect(engine="streaming")
|
dff = lff.collect(engine="streaming")
|
||||||
logger.debug("Filter data: " + str(dff.height))
|
|
||||||
|
|
||||||
df_per_uid = (
|
df_per_uid = (
|
||||||
dff.select("uid", "montant").group_by("uid").agg(pl.col("montant").first())
|
dff.select("uid", "montant").group_by("uid").agg(pl.col("montant").first())
|
||||||
|
|||||||
@@ -760,7 +760,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "decp-info"
|
name = "decp-info"
|
||||||
version = "2.7.1"
|
version = "2.7.2"
|
||||||
source = { virtual = "." }
|
source = { virtual = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "dash", extra = ["compress"] },
|
{ name = "dash", extra = ["compress"] },
|
||||||
|
|||||||
Reference in New Issue
Block a user