fabcal/fabcal/routers/frontend.py

59 lines
1.7 KiB
Python

from datetime import datetime
import babel.dates
from fastapi import APIRouter
from fastapi.requests import Request
from fastapi.responses import HTMLResponse
from fabcal.calendar_client import get_future_events, group_by_date
from fabcal.routers import templates
router = APIRouter()
async def generate_response(request: Request, template_name: str, **additional_context):
events = await get_future_events()
grouped_events = list(group_by_date(events).items())
# couple of helpers
def localized_abbreviated_month(dt: datetime):
return babel.dates.format_datetime(dt, format="%b", locale="de_DE")
# couple of helpers
def localized_abbreviated_weekday(dt: datetime):
return babel.dates.format_datetime(dt, format="%b", locale="de_DE")
context = {
"request": request,
"grouped_events": grouped_events,
"localized_abbreviated_month": localized_abbreviated_month,
"localized_abbreviated_weekday": localized_abbreviated_weekday,
}
context.update(additional_context)
return templates.TemplateResponse(template_name, context=context)
@router.get("/sidebar/embed.html", response_class=HTMLResponse)
async def embed_sidebar(request: Request, max_days: int = None):
try:
max_days = int(max_days)
except TypeError:
pass
return await generate_response(request, "sidebar/embed.html", max_days=max_days)
@router.get("/sidebar/demo.html", response_class=HTMLResponse)
async def sidebar_demo(request: Request, max_days: int = None):
try:
max_days = int(max_days)
except TypeError:
pass
return await generate_response(request, "sidebar/demo.html", max_days=max_days)