50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
import logging
|
|
from typing import Any, Dict, Optional
|
|
|
|
logger = logging.getLogger("mealie-mcp")
|
|
|
|
|
|
class FoodMixin:
|
|
"""Mixin for Mealie food and unit API operations."""
|
|
|
|
def get_foods(
|
|
self,
|
|
search: Optional[str] = None,
|
|
page: Optional[int] = None,
|
|
per_page: Optional[int] = None,
|
|
) -> Dict[str, Any]:
|
|
"""Get list of foods."""
|
|
params = {}
|
|
if search:
|
|
params["search"] = search
|
|
if page:
|
|
params["page"] = page
|
|
if per_page:
|
|
params["perPage"] = per_page
|
|
|
|
logger.info({"message": "Retrieving foods", "parameters": params})
|
|
return self._handle_request("GET", "/api/foods", params=params)
|
|
|
|
def get_units(self) -> Dict[str, Any]:
|
|
"""Get list of all units."""
|
|
logger.info({"message": "Retrieving units"})
|
|
return self._handle_request("GET", "/api/units")
|
|
|
|
def create_food(self, name: str, description: Optional[str] = None) -> Dict[str, Any]:
|
|
"""Create a new food item."""
|
|
data = {"name": name}
|
|
if description:
|
|
data["description"] = description
|
|
|
|
logger.info({"message": "Creating food", "name": name})
|
|
return self._handle_request("POST", "/api/foods", json=data)
|
|
|
|
def create_unit(self, name: str, abbreviation: Optional[str] = None) -> Dict[str, Any]:
|
|
"""Create a new unit."""
|
|
data = {"name": name}
|
|
if abbreviation:
|
|
data["abbreviation"] = abbreviation
|
|
|
|
logger.info({"message": "Creating unit", "name": name})
|
|
return self._handle_request("POST", "/api/units", json=data)
|