import uuid from contextvars import ContextVar from starlette.middleware.base import BaseHTTPMiddleware from starlette.requests import Request from starlette.responses import Response request_id_var: ContextVar[str] = ContextVar("request_id", default="") class RequestIDMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): rid = str(uuid.uuid4()) request_id_var.set(rid) response: Response = await call_next(request) response.headers["X-Request-ID"] = rid return response def get_request_id() -> str: return request_id_var.get()