From cf695f15180cbd0db5ec6580aedce17bc0418ce7 Mon Sep 17 00:00:00 2001 From: Philipp Traber Date: Sun, 13 Jul 2025 16:07:26 +0200 Subject: [PATCH] error handling --- src/api.py | 62 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/src/api.py b/src/api.py index 9943dc8..79ddc59 100644 --- a/src/api.py +++ b/src/api.py @@ -7,7 +7,9 @@ from cachetools import cached, TTLCache from bs4 import BeautifulSoup import requests import re +import logging +logger = logging.getLogger("uvicorn.error") cache = TTLCache(maxsize=1, ttl=3600) app = FastAPI() @@ -16,39 +18,45 @@ regex = re.compile(r'spätzle ([^/]*)', re.IGNORECASE) @cached(cache) def checkMensa(): - print("Checking Mensa") + logger.info("Checking Mensa") - url = 'https://seezeit.com/essen/speiseplaene/mensa-giessberg/' - r = requests.get(url) - soup = BeautifulSoup(r.text, 'html.parser') + try: + url = 'https://seezeit.com/essen/speiseplaene/mensa-giessberg/' + r = requests.get(url) + soup = BeautifulSoup(r.text, 'html.parser') - today = soup.find('a', class_='heute')['rel'][0] - today_menu = soup.find('div', id=f'tab{today}') - meals = today_menu.find_all('div', class_='title') + today = soup.find('a', class_='heute')['rel'][0] + today_menu = soup.find('div', id=f'tab{today}') + meals = today_menu.find_all('div', class_='title') - spaetzle = None - for m in meals: - if "spätzle" in m.text.lower(): - spaetzle = m - break + spaetzle = None + for m in meals: + if "spätzle" in m.text.lower(): + spaetzle = m + break - if spaetzle is not None: - ingredients = re.search(regex, str(spaetzle)).group(1) - if '28' in ingredients: - answer = "Spätzle with egg today" - color = "green" - emoji = "✅" - + if spaetzle is not None: + ingredients = re.search(regex, str(spaetzle)).group(1) + if '28' in ingredients: + answer = "Spätzle with egg today" + color = "green" + emoji = "✅" + + else: + answer = "WARNING: Spätzle without egg today" + color = "red" + emoji = "❌" else: - answer = "WARNING: Spätzle without egg today" - color = "red" - emoji = "❌" - else: - answer = "No Spätzle today " + answer = "No Spätzle today " + color = "grey" + emoji = "🤷" + except Exception as e: + answer = "No menu today" color = "grey" - emoji = "🤷" - - return answer, color, emoji + emoji = "⛱️" + finally: + logger.info(f"Answer: {answer}, Color: {color}, Emoji: {emoji}") + return answer, color, emoji @app.get("/", response_class=HTMLResponse) async def root(request: Request):