Merge pull request #8 from traberph/feature/error-handling

error handling
This commit is contained in:
traberph
2025-07-13 16:09:46 +02:00
committed by GitHub
+35 -27
View File
@@ -7,7 +7,9 @@ from cachetools import cached, TTLCache
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
import requests import requests
import re import re
import logging
logger = logging.getLogger("uvicorn.error")
cache = TTLCache(maxsize=1, ttl=3600) cache = TTLCache(maxsize=1, ttl=3600)
app = FastAPI() app = FastAPI()
@@ -16,39 +18,45 @@ regex = re.compile(r'spätzle <sup>([^/]*)</sup>', re.IGNORECASE)
@cached(cache) @cached(cache)
def checkMensa(): def checkMensa():
print("Checking Mensa") logger.info("Checking Mensa")
url = 'https://seezeit.com/essen/speiseplaene/mensa-giessberg/' try:
r = requests.get(url) url = 'https://seezeit.com/essen/speiseplaene/mensa-giessberg/'
soup = BeautifulSoup(r.text, 'html.parser') r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
today = soup.find('a', class_='heute')['rel'][0] today = soup.find('a', class_='heute')['rel'][0]
today_menu = soup.find('div', id=f'tab{today}') today_menu = soup.find('div', id=f'tab{today}')
meals = today_menu.find_all('div', class_='title') meals = today_menu.find_all('div', class_='title')
spaetzle = None spaetzle = None
for m in meals: for m in meals:
if "spätzle" in m.text.lower(): if "spätzle" in m.text.lower():
spaetzle = m spaetzle = m
break break
if spaetzle is not None: if spaetzle is not None:
ingredients = re.search(regex, str(spaetzle)).group(1) ingredients = re.search(regex, str(spaetzle)).group(1)
if '28' in ingredients: if '28' in ingredients:
answer = "Spätzle with egg today" answer = "Spätzle with egg today"
color = "green" color = "green"
emoji = "✅" emoji = "✅"
else:
answer = "WARNING: Spätzle without egg today"
color = "red"
emoji = "❌"
else: else:
answer = "WARNING: Spätzle without egg today" answer = "No Spätzle today "
color = "red" color = "grey"
emoji = "❌" emoji = "🤷"
else: except Exception as e:
answer = "No Spätzle today " answer = "No menu today"
color = "grey" color = "grey"
emoji = "🤷" emoji = "⛱️"
finally:
return answer, color, emoji logger.info(f"Answer: {answer}, Color: {color}, Emoji: {emoji}")
return answer, color, emoji
@app.get("/", response_class=HTMLResponse) @app.get("/", response_class=HTMLResponse)
async def root(request: Request): async def root(request: Request):