from __future__ import annotations import time from . import settings _ACCESS_REQUEST_RATE: dict[str, list[float]] = {} def rate_limit_allow(ip: str) -> bool: if settings.ACCESS_REQUEST_RATE_LIMIT <= 0: return True now = time.time() window_start = now - settings.ACCESS_REQUEST_RATE_WINDOW_SEC bucket = _ACCESS_REQUEST_RATE.setdefault(ip, []) bucket[:] = [t for t in bucket if t >= window_start] if len(bucket) >= settings.ACCESS_REQUEST_RATE_LIMIT: return False bucket.append(now) return True