import logging from datetime import datetime import requests logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s") log = logging.getLogger(__name__) SCHOOL_SLUG = "kyrene-de-la-mariposa" MENU_TYPE = "lunch" API_BASE = "https://kyrene.api.nutrislice.com/menu/api/weeks/school" def _fetch_week(date_str: str) -> dict: dt = datetime.strptime(date_str, "%Y-%m-%d") url = f"{API_BASE}/{SCHOOL_SLUG}/menu-type/{MENU_TYPE}/{dt.year}/{dt.month:02d}/{dt.day:02d}/" log.info(f"Fetching {url}") resp = requests.get( url, headers={"Accept": "application/json", "User-Agent": "Mozilla/5.0"}, timeout=20, ) resp.raise_for_status() return resp.json() def _extract_items(day: dict) -> list[str]: items = [] for entry in day.get("menu_items", []): if entry.get("is_section_title") or entry.get("is_station_header"): continue food = entry.get("food") if food and food.get("name"): items.append(food["name"].strip()) return items def get_week_menu(date_str: str | None = None) -> list[dict]: """Returns every day in the school-published week containing date_str, as [{"date": "YYYY-MM-DD", "items": [...]}, ...] in the API's own order. Days with no posted menu (weekends, breaks, holidays) have an empty items list.""" if date_str is None: date_str = datetime.now().strftime("%Y-%m-%d") data = _fetch_week(date_str) return [ {"date": day.get("date"), "items": _extract_items(day)} for day in data.get("days", []) if day.get("date") ]