Files
F-r-ldraledigplannerare/backend/app/routers/calendar.py
T
jacobh2 64734ae6e7 Silence the deprecation warnings our own code raises
Starlette renamed HTTP_422_UNPROCESSABLE_ENTITY to HTTP_422_UNPROCESSABLE_CONTENT
and now warns on the old spelling; the value is unchanged at 422, so the 20 call
sites in the routers move over with no wire-format or frontend impact.

Alembic >=1.16 supersedes version_path_separator with path_separator, which
governs both prepend_sys_path and version_locations, and warns when it is absent.

Together this takes pytest from 26 deprecation warnings to 6. The remainder are
slowapi calling asyncio.iscoroutinefunction; they are left visible deliberately,
with no filterwarnings entry, as a reminder to revisit once upstream ships a fix.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 18:48:02 +02:00

36 lines
1.3 KiB
Python

"""HTTP routes for the Swedish calendar (röda dagar / klämdagar).
Routers stay thin: validate via Pydantic/query params, call the service, map
domain errors to HTTP. Serves both §3.4 (Kalender shading) and §3.8 (Settings
red-days list) from one endpoint — see `app.services.calendar_service`.
"""
from uuid import UUID
from fastapi import APIRouter, HTTPException, Query, status
from app.dependencies import CalendarServiceDep, WorkspaceScopeDep
from app.models.calendar import CalendarDaysResponse
from app.services.calendar_service import MAX_WINDOW_YEARS
from app.utils.errors import ValidationError
router = APIRouter(prefix="/api/calendar", tags=["calendar"])
@router.get("/days", response_model=CalendarDaysResponse)
async def get_calendar_days(
workspace_id: UUID,
start_year: int,
service: CalendarServiceDep,
scope: WorkspaceScopeDep,
years: int = Query(default=MAX_WINDOW_YEARS, ge=1, le=MAX_WINDOW_YEARS),
) -> CalendarDaysResponse:
scope.check_workspace(workspace_id)
try:
window = await service.get_calendar_window(
workspace_id=workspace_id, start_year=start_year, years=years
)
except ValidationError as exc:
raise HTTPException(status.HTTP_422_UNPROCESSABLE_CONTENT, str(exc)) from exc
return CalendarDaysResponse.from_domain(window)