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

enforce formatting
This commit is contained in:
traberph
2025-07-13 16:33:58 +02:00
committed by GitHub
4 changed files with 64 additions and 23 deletions
+31
View File
@@ -0,0 +1,31 @@
name: Ruff - Code Quality Check
on:
pull_request:
branches:
- main
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup python
uses: actions/setup-python@v4
with:
python-version: '3.12'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run Ruff
run: |
pip install ruff
ruff format --check
ruff check
+2
View File
@@ -0,0 +1,2 @@
[lint]
extend-select = ["I"]
+4
View File
@@ -0,0 +1,4 @@
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "charliermarsh.ruff"
}
+27 -23
View File
@@ -1,33 +1,32 @@
from fastapi import FastAPI
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.responses import FileResponse
from fastapi.templating import Jinja2Templates
from cachetools import cached, TTLCache
from bs4 import BeautifulSoup
import requests
import re
import logging
import re
import requests
from bs4 import BeautifulSoup
from cachetools import TTLCache, cached
from fastapi import FastAPI, Request
from fastapi.responses import FileResponse, HTMLResponse
from fastapi.templating import Jinja2Templates
logger = logging.getLogger("uvicorn.error")
cache = TTLCache(maxsize=1, ttl=3600)
app = FastAPI()
templates = Jinja2Templates(directory="template")
regex = re.compile(r'spätzle <sup>([^/]*)</sup>', re.IGNORECASE)
regex = re.compile(r"spätzle <sup>([^/]*)</sup>", re.IGNORECASE)
@cached(cache)
def checkMensa():
logger.info("Checking Mensa")
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')
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")
spaetzle = None
for m in meals:
@@ -37,11 +36,11 @@ def checkMensa():
if spaetzle is not None:
ingredients = re.search(regex, str(spaetzle)).group(1)
if '28' in ingredients:
if "28" in ingredients:
answer = "Spätzle with egg today"
color = "green"
emoji = "✅"
else:
answer = "WARNING: Spätzle without egg today"
color = "red"
@@ -50,7 +49,7 @@ def checkMensa():
answer = "No Spätzle today "
color = "grey"
emoji = "🤷"
except Exception as e:
except Exception:
answer = "No menu today"
color = "grey"
emoji = "⛱️"
@@ -58,17 +57,22 @@ def checkMensa():
logger.info(f"Answer: {answer}, Color: {color}, Emoji: {emoji}")
return answer, color, emoji
@app.get("/", response_class=HTMLResponse)
async def root(request: Request):
answer, color, emoji = checkMensa()
return templates.TemplateResponse(
request=request, name="main.html", context={"text": answer, "color": color , "emoji": emoji}
request=request,
name="main.html",
context={"text": answer, "color": color, "emoji": emoji},
)
@app.get("/manifest.json")
async def manifest(request: Request):
return FileResponse(path="assets/manifest.json")
@app.get("/icons/512.png")
async def icon(request: Request):
return FileResponse(path="assets/logo.png")