summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kitchen/tests.py13
-rw-r--r--kitchen/views.py2
-rw-r--r--mcp_server/server.py15
3 files changed, 23 insertions, 7 deletions
diff --git a/kitchen/tests.py b/kitchen/tests.py
index 9ce9098..f3f68e2 100644
--- a/kitchen/tests.py
+++ b/kitchen/tests.py
@@ -224,6 +224,19 @@ class BulkAddApiTests(_ApiTestCase):
self.assertEqual(rows.count(), 1)
self.assertEqual(rows.first().state, "in")
+ def test_tolerates_null_unit_and_quantity(self):
+ # An MCP client may send unit/quantity as null for unknown items.
+ r = self.client.post(
+ "/api/bulk-pantry-add/",
+ {"items": [{"ingredient_name": "pork mince", "location": "fridge",
+ "unit": None, "quantity": None}]},
+ format="json",
+ )
+ self.assertEqual(r.status_code, 201)
+ self.assertTrue(
+ PantryItem.objects.filter(ingredient__name="pork mince", location="fridge").exists()
+ )
+
class WhatCanICookApiTests(_ApiTestCase):
def setUp(self):
diff --git a/kitchen/views.py b/kitchen/views.py
index 5fdf041..882f2ef 100644
--- a/kitchen/views.py
+++ b/kitchen/views.py
@@ -576,7 +576,7 @@ def bulk_pantry_add(request):
name = item_data.get("ingredient_name", "").strip()
qty_raw = item_data.get("quantity")
quantity = int(qty_raw) if qty_raw not in (None, "") else None
- unit = item_data.get("unit", "items")
+ unit = item_data.get("unit") or "items" # tolerate null/empty
location = item_data.get("location", "fridge")
expiry_days = item_data.get("expiry_days") # optional override
diff --git a/mcp_server/server.py b/mcp_server/server.py
index cc8fe4a..dcc960b 100644
--- a/mcp_server/server.py
+++ b/mcp_server/server.py
@@ -73,15 +73,18 @@ def add_to_pantry(items: list[dict]) -> dict:
"""Add items the user bought. Each item is {name, location?, quantity?,
unit?} — e.g. {"name": "pork mince", "location": "fridge"}. Existing items
are restocked (set back to In) rather than duplicated."""
- payload = [
- {
+ payload = []
+ for it in items:
+ entry = {
"ingredient_name": it.get("name") or it.get("ingredient_name"),
"location": it.get("location", "fridge"),
- "quantity": it.get("quantity"),
- "unit": it.get("unit"),
}
- for it in items
- ]
+ # Only forward optional fields when set, so the API applies its defaults.
+ if it.get("quantity") is not None:
+ entry["quantity"] = it["quantity"]
+ if it.get("unit"):
+ entry["unit"] = it["unit"]
+ payload.append(entry)
try:
return _api.bulk_add(payload)
except FoodApiError as e: