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.
This commit is contained in:
parent
c804f06b67
commit
41a396e807
1 changed files with 12 additions and 0 deletions
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue