59 lines
1.7 KiB
Python
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)
|