Source code for boxsdk.util.lru_cache
# coding: utf-8
from __future__ import unicode_literals
from collections import OrderedDict
[docs]class LRUCache(object):
def __init__(self, capacity=512):
"""
:param capacity:
The Maximum number of key-value pairs can be cached.
:type capacity:
`int`
"""
super(LRUCache, self).__init__()
self.capacity = capacity
self.cache = OrderedDict()
[docs] def get(self, key):
"""
Look up the value in cache using the associated key. Returns the value if found.
Raises :class:`KeyError` otherwise.
:param key:
The key used to look up the cache.
:type key:
`unicode`
:return:
The value associated with the key if exists.
:raises:
:class:`KeyError` if the key doesn't exist.
"""
value = self.cache.pop(key)
self.cache[key] = value
return value
[docs] def set(self, key, value=None):
"""
Store the key-value pair to cache.
:param key:
The key associated with the value to be stored. It's used to look up the cache.
:type key:
`unicode`
:param value:
The value to be stored.
:type value:
varies
"""
try:
self.cache.pop(key)
except KeyError:
if len(self.cache) >= self.capacity:
self.cache.popitem(last=False)
self.cache[key] = value