fix(mcp): dedoublonne les colonnes demandees (evite SELECT dupliqué) (#114)
This commit is contained in:
+4
-2
@@ -131,8 +131,10 @@ def search_marches(
|
|||||||
invalid = [c for c in colonnes if c not in SELECTABLE_COLUMNS]
|
invalid = [c for c in colonnes if c not in SELECTABLE_COLUMNS]
|
||||||
if invalid:
|
if invalid:
|
||||||
return {"error": f"colonne inconnue: {invalid[0]}", "champ": invalid[0]}
|
return {"error": f"colonne inconnue: {invalid[0]}", "champ": invalid[0]}
|
||||||
# uid toujours présent (clé primaire + nécessaire au lien), sans doublon.
|
# uid toujours présent (clé primaire + nécessaire au lien) ; dédoublonne
|
||||||
out_columns = ["uid"] + [c for c in colonnes if c != "uid"]
|
# toute la liste (un client peut répéter une colonne malgré l'enum, ce
|
||||||
|
# qui produirait des noms de colonnes dupliqués au SELECT).
|
||||||
|
out_columns = list(dict.fromkeys(["uid", *colonnes]))
|
||||||
|
|
||||||
page = max(1, int(page))
|
page = max(1, int(page))
|
||||||
offset = (page - 1) * PAGE_SIZE
|
offset = (page - 1) * PAGE_SIZE
|
||||||
|
|||||||
@@ -182,6 +182,14 @@ def test_search_marches_custom_columns_include_uid_only_once(monkeypatch):
|
|||||||
assert set(m.keys()) == {"uid", "objet", "lien"}
|
assert set(m.keys()) == {"uid", "objet", "lien"}
|
||||||
|
|
||||||
|
|
||||||
|
def test_search_marches_duplicate_columns_deduped(monkeypatch):
|
||||||
|
monkeypatch.setenv("APP_BASE_URL", "https://colibre.fr")
|
||||||
|
# Un client peut répéter une colonne malgré l'enum : pas de doublon au SELECT.
|
||||||
|
result = search_marches(acheteur_id="123", colonnes=["objet", "objet"])
|
||||||
|
m = result["marches"][0]
|
||||||
|
assert set(m.keys()) == {"uid", "objet", "lien"}
|
||||||
|
|
||||||
|
|
||||||
def test_search_marches_invalid_column_rejected():
|
def test_search_marches_invalid_column_rejected():
|
||||||
result = search_marches(acheteur_id="123", colonnes=["nexiste_pas"])
|
result = search_marches(acheteur_id="123", colonnes=["nexiste_pas"])
|
||||||
assert result["error"] == "colonne inconnue: nexiste_pas"
|
assert result["error"] == "colonne inconnue: nexiste_pas"
|
||||||
|
|||||||
Reference in New Issue
Block a user