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.

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…