From 41a396e807c1f112ddc9579bbc8b31f1f3675bc8 Mon Sep 17 00:00:00 2001 From: tegwick Date: Wed, 8 Jul 2026 23:06:45 +0200 Subject: [PATCH] Support legacy workstream_id body metering on progress POST 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. --- hub_core/routers/progress.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hub_core/routers/progress.py b/hub_core/routers/progress.py index 7467ea4..68fa0f9 100644 --- a/hub_core/routers/progress.py +++ b/hub_core/routers/progress.py @@ -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()