from window import SlidingWindow class RateLimiter: def __init__(self, limit, span): self.limit = limit self.window = SlidingWindow(span) def allow(self, at): if self.window.count(at) >= self.limit: return False self.window.add(at) return True def remaining(self, at): return max(0, self.limit - self.window.count(at))