Support legacy workstream_id body metering on progress POST
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s

create_progress_router accepts optional body detection and metering
hooks so host apps can record usage when clients POST /progress/ with
the legacy workstream_id field.
This commit is contained in:
tegwick 2026-07-08 23:06:45 +02:00
parent c804f06b67
commit 41a396e807

View file

@ -21,6 +21,8 @@ MeterLegacyWorkstreamId = Callable[
Awaitable[None],
]
ProgressBodyUsesLegacyWorkstreamId = Callable[[Any], bool]
def create_progress_router(
get_session: Callable[..., AsyncSession],
@ -29,6 +31,8 @@ def create_progress_router(
progress_create_schema: type[ProgressEventCreate] = ProgressEventCreate,
progress_read_schema: type[ProgressEventRead] = ProgressEventRead,
meter_legacy_workstream_id: MeterLegacyWorkstreamId | None = None,
progress_body_uses_legacy_workstream_id: ProgressBodyUsesLegacyWorkstreamId | None = None,
meter_legacy_workstream_id_body: MeterLegacyWorkstreamId | None = None,
) -> APIRouter:
router = APIRouter(prefix="/progress", tags=["progress"])
list_response_model = list[progress_read_schema]
@ -149,9 +153,17 @@ def create_progress_router(
@router.post("/", response_model=progress_read_schema, status_code=status.HTTP_201_CREATED)
async def append_progress(
request: Request,
response: Response,
body: progress_create_schema,
session: AsyncSession = Depends(get_session),
) -> Any:
if (
meter_legacy_workstream_id_body is not None
and progress_body_uses_legacy_workstream_id is not None
and progress_body_uses_legacy_workstream_id(body)
):
await meter_legacy_workstream_id_body(session, request, response)
event = progress_model(**body.model_dump())
session.add(event)
await session.commit()