# middleware/decorators.py from functools import wraps from fastapi import HTTPException from middleware.rate_limiter import RateLimiter # Initialize rate limiter instance rate_limiter = RateLimiter() def rate_limit(max_requests: int = 100, window_seconds: int = 3600): """Rate limiting decorator for FastAPI endpoints""" def decorator(func): @wraps(func) async def wrapper(*args, **kwargs): # Extract client IP or user ID for rate limiting client_id = "anonymous" # In production, extract from request if not rate_limiter.allow_request(client_id, max_requests, window_seconds): raise HTTPException( status_code=429, detail="Rate limit exceeded" ) return await func(*args, **kwargs) return wrapper return decorator