feat(mcp): parametre colonnes (enum) pour rechercher_marches (#114)

This commit is contained in:
Colin Maudry
2026-07-14 18:06:02 +02:00
parent f668db1419
commit b4930537a1
2 changed files with 33 additions and 0 deletions
+10
View File
@@ -1,6 +1,7 @@
from dash.mcp import mcp_enabled
from src.mcp import queries
from src.mcp.queries import ColonneMarche
from src.utils.tracking import track_mcp_tool
@@ -74,6 +75,7 @@ def rechercher_marches(
departement: str | None = None,
page: int = 1,
filtres_avances: dict | None = None,
colonnes: list[ColonneMarche] | None = None,
) -> dict:
"""Recherche paginée de marchés publics (DECP).
@@ -84,6 +86,13 @@ def rechercher_marches(
filtres_avances : dict optionnel {"colonne__operateur": valeur} pour les
besoins pointus. Colonnes et opérateurs disponibles via l'outil
schema_donnees().
colonnes : liste optionnelle de colonnes à renvoyer. Par défaut, un jeu
standard (uid, objet, montant, dateNotification, codeCPV, acheteur_id,
acheteur_nom, acheteur_departement_code, titulaire_id, titulaire_nom). Si
fournie, REMPLACE le jeu par défaut (le champ uid reste toujours présent).
Colonnes disponibles via schema_donnees().colonnes_disponibles.
Chaque marché renvoyé contient en plus un champ `lien` (URL de la fiche
marché sur colibre).
page : numéro de page (50 résultats par page).
Retourne {meta: {page, page_size, total}, marches: [...]}.
"""
@@ -100,4 +109,5 @@ def rechercher_marches(
departement=departement,
page=page,
filtres_avances=filtres_avances,
colonnes=colonnes,
)
+23
View File
@@ -31,3 +31,26 @@ def test_stats_acheteur_returns_stats():
def test_stats_titulaire_returns_stats():
result = tools.stats_titulaire("345")
assert result["nb_marches"] >= 1
def test_rechercher_marches_colonnes_param_is_enum():
import typing
from pydantic import TypeAdapter
hints = typing.get_type_hints(tools.rechercher_marches)
schema = TypeAdapter(hints["colonnes"]).json_schema()
# list[ColonneMarche] | None -> anyOf[array(items.enum), null]
array_schema = next(s for s in schema["anyOf"] if s.get("type") == "array")
enum = array_schema["items"]["enum"]
assert "objet" in enum
assert "montant" in enum
assert "uid" in enum
def test_rechercher_marches_colonnes_passthrough(monkeypatch):
monkeypatch.setenv("APP_BASE_URL", "https://colibre.fr")
result = tools.rechercher_marches(acheteur_id="123", colonnes=["objet"])
m = result["marches"][0]
assert set(m.keys()) == {"uid", "objet", "lien"}
assert m["lien"] == f"https://colibre.fr/marche/{m['uid']}"