Refactoring code for modular approach
This commit is contained in:
29
middleware/decorators.py
Normal file
29
middleware/decorators.py
Normal file
@@ -0,0 +1,29 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user