from __future__ import annotations import time from collections import OrderedDict class InboundDedupe: MAX_ENTRIES = 2048 TTL_SECONDS = 300 def __init__(self) -> None: self._seen: OrderedDict[str, float] = OrderedDict() def is_duplicate(self, message_guid: str) -> bool: self._evict_expired() return message_guid in self._seen def mark_seen(self, message_guid: str) -> None: self._evict_expired() if len(self._seen) >= self.MAX_ENTRIES: self._seen.popitem(last=False) self._seen[message_guid] = time.monotonic() self._seen.move_to_end(message_guid) def _evict_expired(self) -> None: now = time.monotonic() expired = [k for k, v in self._seen.items() if now - v > self.TTL_SECONDS] for k in expired: del self._seen[k]