import fastapi import pydantic import typing from app.storage.mongo import tasks from app.storage import redis router = fastapi.APIRouter() class Response(pydantic.BaseModel): id: str attempt: int payload: dict @router.get('/api/v1/take', responses={404: {'description': 'Not found'}}) async def execute(queue: typing.Annotated[str, fastapi.Header()]) -> Response: async with redis.database.lock(queue): task = await tasks.take_task(queue) if not task: raise fastapi.HTTPException(404) return Response(id=str(task._id), attempt=task.attempts, payload=task.payload)