35 lines
875 B
Python
35 lines
875 B
Python
from collections import OrderedDict
|
|
from typing import Callable, List, TypeVar
|
|
|
|
|
|
class LimitedSizeOrderedDict(OrderedDict):
|
|
def __init__(self, maxlen=20):
|
|
"""Initialize a new DedupStore."""
|
|
super().__init__()
|
|
self.maxlen = maxlen
|
|
|
|
def append(self, key, val, on_delete: Callable = None):
|
|
self[key] = val
|
|
self.move_to_end(key)
|
|
if len(self) > self.maxlen:
|
|
# Removes the first record which should also be the oldest
|
|
itm = self.popitem(last=False)
|
|
if on_delete:
|
|
on_delete(itm)
|
|
|
|
|
|
_T = TypeVar("_T")
|
|
|
|
|
|
class BoundFifoList(List):
|
|
|
|
def __init__(self, maxlen=20) -> None:
|
|
super().__init__()
|
|
self.maxlen = maxlen
|
|
|
|
def append(self, __object: _T) -> None:
|
|
super().insert(0, __object)
|
|
while len(self) >= self.maxlen:
|
|
self.pop()
|
|
|