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:
@@ -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()
|
||||||
|
|||||||
@@ -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"]}})]
|
||||||
|
|||||||
Reference in New Issue
Block a user