style: clean up unused parameters and imports in examples
This commit is contained in:
@@ -12,8 +12,8 @@ from fastapi.responses import HTMLResponse, JSONResponse, PlainTextResponse
|
||||
|
||||
from fastapi_traffic import (
|
||||
MemoryBackend,
|
||||
RateLimitExceeded,
|
||||
RateLimiter,
|
||||
RateLimitExceeded,
|
||||
rate_limit,
|
||||
)
|
||||
from fastapi_traffic.core.limiter import set_limiter
|
||||
@@ -26,7 +26,7 @@ limiter = RateLimiter(backend)
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
async def lifespan(_: FastAPI):
|
||||
await limiter.initialize()
|
||||
set_limiter(limiter)
|
||||
yield
|
||||
@@ -38,7 +38,9 @@ app = FastAPI(title="Custom Responses Example", lifespan=lifespan)
|
||||
|
||||
# 1. Standard JSON error response
|
||||
@app.exception_handler(RateLimitExceeded)
|
||||
async def json_rate_limit_handler(request: Request, exc: RateLimitExceeded) -> JSONResponse:
|
||||
async def json_rate_limit_handler(
|
||||
request: Request, exc: RateLimitExceeded
|
||||
) -> JSONResponse:
|
||||
"""Standard JSON response for API clients."""
|
||||
headers = exc.limit_info.to_headers() if exc.limit_info else {}
|
||||
|
||||
@@ -85,7 +87,7 @@ async def log_blocked_request(request: Request, info: Any) -> None:
|
||||
window_size=60,
|
||||
on_blocked=log_blocked_request,
|
||||
)
|
||||
async def monitored_endpoint(request: Request) -> dict[str, str]:
|
||||
async def monitored_endpoint(_: Request) -> dict[str, str]:
|
||||
"""Endpoint with blocked request logging."""
|
||||
return {"message": "Success"}
|
||||
|
||||
@@ -97,7 +99,7 @@ async def monitored_endpoint(request: Request) -> dict[str, str]:
|
||||
window_size=60,
|
||||
error_message="Search rate limit exceeded. Please wait before searching again.",
|
||||
)
|
||||
async def search_endpoint(request: Request, q: str = "") -> dict[str, Any]:
|
||||
async def search_endpoint(_: Request, q: str = "") -> dict[str, Any]:
|
||||
"""Search with custom error message."""
|
||||
return {"query": q, "results": []}
|
||||
|
||||
@@ -108,7 +110,7 @@ async def search_endpoint(request: Request, q: str = "") -> dict[str, Any]:
|
||||
window_size=300, # 5 uploads per 5 minutes
|
||||
error_message="Upload limit reached. You can upload 5 files every 5 minutes.",
|
||||
)
|
||||
async def upload_endpoint(request: Request) -> dict[str, str]:
|
||||
async def upload_endpoint(_: Request) -> dict[str, str]:
|
||||
"""Upload with custom error message."""
|
||||
return {"message": "Upload successful"}
|
||||
|
||||
@@ -116,7 +118,7 @@ async def upload_endpoint(request: Request) -> dict[str, str]:
|
||||
# 4. Different response formats based on Accept header
|
||||
@app.get("/api/flexible")
|
||||
@rate_limit(limit=10, window_size=60)
|
||||
async def flexible_endpoint(request: Request) -> dict[str, str]:
|
||||
async def flexible_endpoint(_: Request) -> dict[str, str]:
|
||||
"""Endpoint that returns different formats."""
|
||||
return {"message": "Success", "data": "Some data"}
|
||||
|
||||
@@ -168,7 +170,7 @@ async def flexible_rate_limit_handler(request: Request, exc: RateLimitExceeded):
|
||||
window_size=60,
|
||||
include_headers=True, # Includes X-RateLimit-* headers
|
||||
)
|
||||
async def verbose_headers_endpoint(request: Request) -> dict[str, Any]:
|
||||
async def verbose_headers_endpoint(_: Request) -> dict[str, Any]:
|
||||
"""Response includes detailed rate limit headers."""
|
||||
return {
|
||||
"message": "Check response headers for rate limit info",
|
||||
@@ -181,10 +183,13 @@ async def verbose_headers_endpoint(request: Request) -> dict[str, Any]:
|
||||
|
||||
|
||||
# 6. Graceful degradation - return cached/stale data instead of error
|
||||
cached_data = {"data": "Cached response", "cached_at": datetime.now(timezone.utc).isoformat()}
|
||||
cached_data = {
|
||||
"data": "Cached response",
|
||||
"cached_at": datetime.now(timezone.utc).isoformat(),
|
||||
}
|
||||
|
||||
|
||||
async def return_cached_on_limit(request: Request, info: Any) -> None:
|
||||
async def return_cached_on_limit(_: Request, __: Any) -> None:
|
||||
"""Log when rate limited (callback doesn't prevent exception)."""
|
||||
logger.info("Returning cached data due to rate limit")
|
||||
# This callback is called when blocked, but doesn't prevent the exception
|
||||
@@ -197,9 +202,12 @@ async def return_cached_on_limit(request: Request, info: Any) -> None:
|
||||
window_size=60,
|
||||
on_blocked=return_cached_on_limit,
|
||||
)
|
||||
async def graceful_endpoint(request: Request) -> dict[str, str]:
|
||||
async def graceful_endpoint(_: Request) -> dict[str, str]:
|
||||
"""Endpoint with graceful degradation."""
|
||||
return {"message": "Fresh data", "timestamp": datetime.now(timezone.utc).isoformat()}
|
||||
return {
|
||||
"message": "Fresh data",
|
||||
"timestamp": datetime.now(timezone.utc).isoformat(),
|
||||
}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user