utils.py
717 Bytes
from ordered_set import OrderedSet
class LimitedSet(OrderedSet):
def __init__(self, limit=0, seq=()):
setattr(self, 'limit', limit)
super(LimitedSet, self).__init__(seq)
self._check_length()
def copy(self):
return LimitedSet(limit=self.limit, seq=self)
def discard(self, key):
self.items.remove(key)
self.map.pop(key)
def _check_length(self):
if not self.limit:
return
if len(self) > self.limit:
for v in self[0:-self.limit]:
self.remove(v)
def add(self, key):
result = super(LimitedSet, self).add(key)
self._check_length()
return result
append = add