feat: chargements de pages best-effort au boot (tableau, sources) (#78)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Colin Maudry
2026-06-12 13:58:50 +02:00
parent fa2709b38c
commit cb93dbe05a
4 changed files with 93 additions and 7 deletions
+5 -3
View File
@@ -1,6 +1,5 @@
from datetime import datetime
from typing import Literal
from urllib.error import HTTPError, URLError
import dash_bootstrap_components as dbc
import dash_leaflet as dl
@@ -120,9 +119,12 @@ def get_barchart_sources(lff: pl.LazyFrame, type_date: str):
def get_sources_tables(source_path) -> html.Div:
try:
if not source_path:
raise ValueError("SOURCE_STATS_CSV_PATH non défini")
dff = pl.read_csv(source_path)
except (URLError, HTTPError):
return html.Div("Erreur de connexion")
except Exception as e:
logger.warning(f"Sources de données indisponibles ({e})")
return html.Div("Sources de données momentanément indisponibles.")
dff = dff.with_columns(
(
pl.lit('<a href = "')
+11 -4
View File
@@ -21,7 +21,7 @@ from dash import (
from src.db import query_marches, schema
from src.figures import DataTable, make_column_picker
from src.utils import get_last_modified, logger
from src.utils import get_data_update_timestamp, logger
from src.utils.seo import META_CONTENT
from src.utils.table import (
COLUMNS,
@@ -33,9 +33,16 @@ from src.utils.table import (
)
from src.utils.tracking import track_search
update_date_timestamp = get_last_modified(os.getenv("DATA_FILE_PARQUET_PATH", ""))
update_date = datetime.fromtimestamp(update_date_timestamp).strftime("%d/%m/%Y")
update_date_iso = datetime.fromtimestamp(update_date_timestamp).isoformat()
update_date_timestamp = get_data_update_timestamp(
os.getenv("DATA_FILE_PARQUET_PATH", ""),
os.getenv("DUCKDB_PATH", "./decp.duckdb"),
)
if update_date_timestamp is not None:
update_date = datetime.fromtimestamp(update_date_timestamp).strftime("%d/%m/%Y")
update_date_iso = datetime.fromtimestamp(update_date_timestamp).isoformat()
else:
update_date = "date inconnue"
update_date_iso = ""
NAME = "Tableau"
+16
View File
@@ -41,3 +41,19 @@ DOMAIN_NAME = (
if os.getenv("DEVELOPMENT", "False").lower() == "true"
else "decp.info"
)
def get_data_update_timestamp(
parquet_path: str, fallback_path: str | None = None
) -> float | None:
"""Date de MAJ des données, best-effort, sans jamais lever (usage au boot)."""
try:
return get_last_modified(parquet_path)
except Exception as e:
logger.warning(f"Date de mise à jour des données indisponible ({e})")
if fallback_path:
try:
return os.path.getmtime(fallback_path)
except OSError:
pass
return None