61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
import base64
|
|
|
|
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")
|
|
|
|
def base64_encode(s: str):
|
|
return base64.b64encode(s.encode()).decode()
|
|
|
|
context = {
|
|
"request": request,
|
|
"grouped_events": grouped_events,
|
|
"dir": dir,
|
|
"localized_abbreviated_month": localized_abbreviated_month,
|
|
"localized_abbreviated_weekday": localized_abbreviated_weekday,
|
|
"base64_encode": base64_encode,
|
|
}
|
|
|
|
context.update(additional_context)
|
|
|
|
return templates.TemplateResponse(
|
|
template_name,
|
|
context={
|
|
"request": request,
|
|
"grouped_events": grouped_events,
|
|
"dir": dir,
|
|
"localized_abbreviated_month": localized_abbreviated_month,
|
|
"localized_abbreviated_weekday": localized_abbreviated_weekday,
|
|
"base64_encode": base64_encode,
|
|
},
|
|
)
|
|
|
|
|
|
@router.get("/sidebar/embed.html", response_class=HTMLResponse)
|
|
async def embed_sidebar(request: Request):
|
|
return await generate_response(request, "sidebar/embed.html")
|