Fix réduction du nombre de colonne, ajoute de lla colonne Marché #84

This commit is contained in:
Colin Maudry
2026-06-23 15:28:42 +02:00
parent f94701207b
commit 3e305845dd
6 changed files with 54 additions and 7 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ DATA_SCHEMA_PATH=https://www.data.gouv.fr/api/1/datasets/r/9a4144c0-ee44-4dec-be
DATA_SCHEMA_CACHE=./schema.cache.json DATA_SCHEMA_CACHE=./schema.cache.json
# Colonnes masquées par défaut # Colonnes masquées par défaut
DISPLAYED_COLUMNS="uid, acheteur_id, acheteur_nom, montant, objet, titulaire_nom, titulaire_id, dateNotification, dureeMois, acheteur_departement_code, sourceDataset" DISPLAYED_COLUMNS="acheteur_nom, montant, objet, titulaire_nom, dateNotification, dureeMois, acheteur_departement_code"
# Formulaire de contact # Formulaire de contact
SENDER_SERVER_DOMAIN="mail.example.com" # serveur SMTP SENDER_SERVER_DOMAIN="mail.example.com" # serveur SMTP
+9
View File
@@ -363,6 +363,15 @@ table.cell-table th {
background-color: rgb(255 240 240 / 40%); background-color: rgb(255 240 240 / 40%);
} }
/* Colonne "Marché" : lien loupe centré et sans soulignement */
table.cell-table td[data-dash-column="marche"] .dash-cell-value {
text-align: center !important;
}
td[data-dash-column="marche"] a {
text-decoration: none;
}
/* Column Visibility Menu */ /* Column Visibility Menu */
.column-actions { .column-actions {
margin-right: 8px; margin-right: 8px;
+8
View File
@@ -158,3 +158,11 @@ DF_TITULAIRES = build_org_frame("titulaire")
DEPARTEMENTS = get_departements() DEPARTEMENTS = get_departements()
DEPARTEMENTS_GEOJSON = get_departements_geojson() DEPARTEMENTS_GEOJSON = get_departements_geojson()
DATA_SCHEMA = get_data_schema() DATA_SCHEMA = get_data_schema()
# Colonne virtuelle (dérivée de uid) : lien loupe vers la fiche du marché.
# Absente du schéma DuckDB, créée à l'affichage dans postprocess_page().
DATA_SCHEMA["marche"] = {
"name": "marche",
"type": "string",
"title": "Marché",
"description": "Lien vers la fiche détaillée du marché.",
}
+7 -5
View File
@@ -359,11 +359,8 @@ def setup_table_columns(
def get_default_hidden_columns(page): def get_default_hidden_columns(page):
if page == "acheteur": if page == "acheteur":
displayed_columns = [ displayed_columns = [
"uid",
"objet", "objet",
"dateNotification", "dateNotification",
"titulaire_id",
"titulaire_typeIdentifiant",
"titulaire_nom", "titulaire_nom",
"titulaire_distance", "titulaire_distance",
"montant", "montant",
@@ -372,10 +369,8 @@ def get_default_hidden_columns(page):
] ]
elif page == "titulaire": elif page == "titulaire":
displayed_columns = [ displayed_columns = [
"uid",
"objet", "objet",
"dateNotification", "dateNotification",
"acheteur_id",
"acheteur_nom", "acheteur_nom",
"titulaire_distance", "titulaire_distance",
"montant", "montant",
@@ -408,6 +403,13 @@ def postprocess_page(dff: pl.DataFrame) -> pl.DataFrame:
À appeler après la pagination. À appeler après la pagination.
""" """
dff = dff.with_columns(pl.all().cast(pl.String).fill_null("")) dff = dff.with_columns(pl.all().cast(pl.String).fill_null(""))
if "uid" in dff.columns:
dff = dff.with_columns(
(
'<a href="/marches/' + pl.col("uid") + '" title="Voir le marché">🔍</a>'
).alias("marche")
)
dff = dff.select(["marche"] + [c for c in dff.columns if c != "marche"])
dff = add_links(dff) dff = add_links(dff)
if "sourceFile" in dff.columns: if "sourceFile" in dff.columns:
dff = add_resource_link(dff) dff = add_resource_link(dff)
+28
View File
@@ -313,3 +313,31 @@ def test_fetch_page_sql_post_processes_links(flask_app):
) )
if page.height > 0: if page.height > 0:
assert "<a href" in page["uid"][0] assert "<a href" in page["uid"][0]
def test_postprocess_page_adds_marche_column():
"""postprocess_page doit créer une colonne 'marche' en première position,
un lien 🔍 vers /marches/{uid}, tout en conservant la colonne uid."""
from src.utils.table import postprocess_page
dff = pl.DataFrame({"uid": ["abc"], "objet": ["Travaux divers"]})
result = postprocess_page(dff)
# 'marche' existe et est la première colonne
assert result.columns[0] == "marche"
# Lien loupe vers la fiche du marché
assert "/marches/abc" in result["marche"][0]
assert "🔍" in result["marche"][0]
# uid est conservée et reste un lien affichant sa propre valeur
assert "uid" in result.columns
assert "abc" in result["uid"][0]
def test_postprocess_page_without_uid_has_no_marche():
"""Sans colonne uid, aucune colonne 'marche' n'est ajoutée."""
from src.utils.table import postprocess_page
dff = pl.DataFrame({"objet": ["Travaux divers"]})
result = postprocess_page(dff)
assert "marche" not in result.columns
Generated
+1 -1
View File
@@ -799,7 +799,7 @@ wheels = [
[[package]] [[package]]
name = "decp-info" name = "decp-info"
version = "2.7.9" version = "2.8.0"
source = { virtual = "." } source = { virtual = "." }
dependencies = [ dependencies = [
{ name = "dash", extra = ["compress"] }, { name = "dash", extra = ["compress"] },