Spaces:
Sleeping
Sleeping
| """ | |
| Request ID Middleware | |
| Attaches a unique request ID to every incoming request so that all | |
| log lines and error responses can be correlated. The ID is set on | |
| ``request.state.request_id`` and returned in the ``X-Request-ID`` | |
| response header. | |
| """ | |
| from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint | |
| from starlette.requests import Request | |
| from starlette.responses import Response | |
| from app.utils.helpers import generate_request_id | |
| class RequestIDMiddleware(BaseHTTPMiddleware): | |
| """Inject a unique request ID into every request/response cycle.""" | |
| async def dispatch( | |
| self, request: Request, call_next: RequestResponseEndpoint | |
| ) -> Response: | |
| # Prefer a client-supplied header; fall back to generated ID. | |
| request_id = request.headers.get("X-Request-ID") or generate_request_id() | |
| request.state.request_id = request_id | |
| response = await call_next(request) | |
| response.headers["X-Request-ID"] = request_id | |
| return response | |