INNER CODE UNIT · Python
rate_limit
felipeall/transfermarkt-api · app/main.py:57
async def rate_limit(request: Request, call_next: RequestResponseEndpoint) -> Response:
"""Answer 429 when the client is over its budget. All API routes share one budget; see `RATE_LIMIT_EXEMPT_PATHS`."""
if not limiter.enabled or request.url.path in RATE_LIMIT_EXEMPT_PATHS:
return await call_next(request)
key = client_ip(request)
if not limiter.hit(key):
return JSONResponse(
{"error": f"Rate limit exceeded: {settings.RATE_LIMITING_FREQUENCY}"},
status_code=429,
headers={"Retry-After": str(limiter.retry_after(key))},
)
return await call_next(request)
@app.middleware("http")
async def track_upstream_fetches(request: Request, call_next: RequestResponseEndpoint) -> Response:
"""
Start a per-request record of upstream fetch times, used for `updatedAt`, and log the request.