from datetime import datetime class LruCacheItem: def __init__(self, key, value): self.key = key self.value = value self.timestamp = datetime.utcnow() class LruCache: def __init__(self, length, delta=None): self.length = length self.delta = delta self.hash = {} self.item_list = [] def insert_item(self, item): if item.key in self.hash: item_index = next( i for i, v in enumerate(self.item_list) if v.key == item.key) self.item_list[:] \ = self.item_list[:item_index] \ + self.item_list[item_index + 1:] self.item_list.insert(0, item) else: if len(self.item_list) > self.length: self.remove_item(self.item_list[-1]) self.hash[item.key] = item self.item_list.insert(0, item) def remove_all(self): self.hash = {} self.item_list = [] def remove_item(self, item): del self.hash[item.key] del self.item_list[self.item_list.index(item)] _CACHE = LruCache(length=100) def purge(): _CACHE.remove_all() def has(key): return key in _CACHE.hash def get(key): return _CACHE.hash[key].value def remove(key): if has(key): del _CACHE.hash[key] def put(key, value): _CACHE.insert_item(LruCacheItem(key, value))