ruby2210/todo-manager
0
1from slowapi import Limiter, _rate_limit_exceeded_handler2from slowapi.util import get_remote_address3from fastapi import FastAPI4from src.core.config import settings5 6 7# Initialize rate limiter8limiter = Limiter(key_func=get_remote_address)9 10 11def add_rate_limiting(app: FastAPI):12 """13 Add rate limiting to the FastAPI application.14 15 Args:16 app: FastAPI application instance17 """18 # Add rate limiter to app state19 app.state.limiter = limiter20 21 # Add rate limit exceeded handler22 app.add_exception_handler(429, _rate_limit_exceeded_handler)23 24 # Add middleware for rate limiting25 from slowapi.middleware import SlowAPIMiddleware26 app.add_middleware(SlowAPIMiddleware)27 28 29def get_rate_limit_config():30 """31 Get rate limit configuration based on environment.32 33 Returns:34 Dictionary with rate limit settings35 """36 if settings.ENVIRONMENT == "development":37 return {38 "requests_per_minute": 100, # Higher rate limit for development39 "requests_per_hour": 100040 }41 else:42 return {43 "requests_per_minute": 10, # Conservative rate limit for production44 "requests_per_hour": 10045 }