Files

22 lines
618 B
Python

import time
from collections import deque
from typing import Callable
WINDOW_SECONDS = 60
class SlidingWindowLimiter:
def __init__(self, clock: Callable[[], float] = time.time, window: float = WINDOW_SECONDS):
self._clock = clock
self._window = window
self._stamps: deque[float] = deque()
def try_acquire(self, limit: int) -> bool:
now = self._clock()
while self._stamps and now - self._stamps[0] >= self._window:
self._stamps.popleft()
if len(self._stamps) >= limit:
return False
self._stamps.append(now)
return True