Files
gogo2/COBY/api/rate_limiter.py
Dobromir Popov 622d059aae 18: tests, fixes
2025-08-05 14:11:49 +03:00

35 lines
1002 B
Python

"""
Simple rate limiter for API requests.
"""
import time
from collections import defaultdict
from typing import Dict
class RateLimiter:
"""Simple rate limiter implementation"""
def __init__(self, requests_per_minute: int = 100, burst_size: int = 20):
self.requests_per_minute = requests_per_minute
self.burst_size = burst_size
self.requests: Dict[str, list] = defaultdict(list)
def is_allowed(self, client_id: str) -> bool:
"""Check if request is allowed for client"""
now = time.time()
minute_ago = now - 60
# Clean old requests
self.requests[client_id] = [
req_time for req_time in self.requests[client_id]
if req_time > minute_ago
]
# Check rate limit
if len(self.requests[client_id]) >= self.requests_per_minute:
return False
# Add current request
self.requests[client_id].append(now)
return True