Read patched recipes by stable id

Co-authored-by: Bumble <bumble@agents.famfallman.com>
Co-authored-by: fredamn76 <fredrik.fallman@gmail.com>
Signed-off-by: fredamn76 <fredrik.fallman@gmail.com>
This commit is contained in:
2026-07-31 09:46:26 +02:00
committed by fredamn76
parent e45156f11b
commit 141b84bae1
2 changed files with 18 additions and 4 deletions
+6 -2
View File
@@ -329,10 +329,14 @@ def patch_recipe(slug_or_id: str, patch: dict[str, Any]) -> dict[str, Any]:
"""Apply an explicit Mealie recipe patch, then read the recipe back. """Apply an explicit Mealie recipe patch, then read the recipe back.
Use this for tags and categories too — the bulk-action endpoints return 500 on Use this for tags and categories too — the bulk-action endpoints return 500 on
this instance. Patch ``recipeCategory`` and ``tags`` directly. this instance. Patch ``recipeCategory`` and ``tags`` directly. The stable
recipe id is captured before the PATCH because changing ``name`` also changes
Mealie's slug, making the old slug invalid for read-back.
""" """
before = get_recipe(slug_or_id)
stable_id = before.get("id") or slug_or_id
_request("PATCH", f"/api/recipes/{slug_or_id}", json=patch) _request("PATCH", f"/api/recipes/{slug_or_id}", json=patch)
return get_recipe(slug_or_id) return get_recipe(stable_id)
@mcp.tool() @mcp.tool()
+12 -2
View File
@@ -62,14 +62,24 @@ class TestUrlImportResponse:
class TestPatchContract: class TestPatchContract:
def test_patch_recipe_reads_back_the_final_object(self, monkeypatch): def test_patch_recipe_reads_back_the_final_object(self, monkeypatch):
seen = [] seen = []
updated = {"slug": "soppa", "name": "Soppa", "tags": [{"name": "📅 Vardag"}]} before = {"id": "stable-id", "slug": "soppa", "name": "Soppa"}
updated = {
"id": "stable-id",
"slug": "ny-soppa",
"name": "Ny soppa",
"tags": [{"name": "📅 Vardag"}],
}
def request(method, path, **kwargs): def request(method, path, **kwargs):
seen.append((method, path, kwargs)) seen.append((method, path, kwargs))
return None return None
monkeypatch.setattr(server, "_request", request) monkeypatch.setattr(server, "_request", request)
monkeypatch.setattr(server, "get_recipe", lambda slug: updated if slug == "soppa" else None) monkeypatch.setattr(
server,
"get_recipe",
lambda key: before if key == "soppa" else updated if key == "stable-id" else None,
)
assert server.patch_recipe("soppa", {"tags": updated["tags"]}) == updated assert server.patch_recipe("soppa", {"tags": updated["tags"]}) == updated
assert seen == [("PATCH", "/api/recipes/soppa", {"json": {"tags": updated["tags"]}})] assert seen == [("PATCH", "/api/recipes/soppa", {"json": {"tags": updated["tags"]}})]