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],
|
Awaitable[None],
|
||||||
]
|
]
|
||||||
|
|
||||||
|
ProgressBodyUsesLegacyWorkstreamId = Callable[[Any], bool]
|
||||||
|
|
||||||
|
|
||||||
def create_progress_router(
|
def create_progress_router(
|
||||||
get_session: Callable[..., AsyncSession],
|
get_session: Callable[..., AsyncSession],
|
||||||
|
|
@ -29,6 +31,8 @@ def create_progress_router(
|
||||||
progress_create_schema: type[ProgressEventCreate] = ProgressEventCreate,
|
progress_create_schema: type[ProgressEventCreate] = ProgressEventCreate,
|
||||||
progress_read_schema: type[ProgressEventRead] = ProgressEventRead,
|
progress_read_schema: type[ProgressEventRead] = ProgressEventRead,
|
||||||
meter_legacy_workstream_id: MeterLegacyWorkstreamId | None = None,
|
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:
|
) -> APIRouter:
|
||||||
router = APIRouter(prefix="/progress", tags=["progress"])
|
router = APIRouter(prefix="/progress", tags=["progress"])
|
||||||
list_response_model = list[progress_read_schema]
|
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)
|
@router.post("/", response_model=progress_read_schema, status_code=status.HTTP_201_CREATED)
|
||||||
async def append_progress(
|
async def append_progress(
|
||||||
|
request: Request,
|
||||||
|
response: Response,
|
||||||
body: progress_create_schema,
|
body: progress_create_schema,
|
||||||
session: AsyncSession = Depends(get_session),
|
session: AsyncSession = Depends(get_session),
|
||||||
) -> Any:
|
) -> 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())
|
event = progress_model(**body.model_dump())
|
||||||
session.add(event)
|
session.add(event)
|
||||||
await session.commit()
|
await session.commit()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue