import threading
import pickle
from datetime import datetime
-from pprint import pprint
# maximum lifetime of cached data (in seconds)
-MAX_CACHE_TTL = 60 * 60
+DEFAULT_CACHE_TTL = 60 * 60
class CacheData:
expires = None
lock = None
- def __init__(self, data, ttl = MAX_CACHE_TTL):
+ def __init__(self, data, ttl = DEFAULT_CACHE_TTL):
self.lock = threading.RLock()
self.data = data
self.renew(ttl)
def get_expires_date(self):
return str(datetime.fromtimestamp(self.expires))
- def renew(self, ttl = MAX_CACHE_TTL):
+ def renew(self, ttl = DEFAULT_CACHE_TTL):
self.created = time.time()
self.expires = self.created + ttl
- def set_data(self, data, renew=True, ttl = MAX_CACHE_TTL):
+ def set_data(self, data, renew=True, ttl = DEFAULT_CACHE_TTL):
with self.lock:
self.data = data
if renew:
cache = {}
lock = threading.RLock()
+
+ def __init__(self, filename=None):
+ if filename:
+ self.load_from_file(filename)
- def add(self, key, value, ttl = MAX_CACHE_TTL):
+ def add(self, key, value, ttl = DEFAULT_CACHE_TTL):
with self.lock:
if self.cache.has_key(key):
self.cache[key].set_data(value, ttl=ttl)
def get(self, key):
data = self.cache.get(key)
- if not data or data.is_expired():
- return None
- return data.get_data()
+ if not data:
+ data = None
+ elif data.is_expired():
+ self.pop(key)
+ data = None
+ else:
+ data = data.get_data()
+ return data
+
+ def pop(self, key):
+ if key in self.cache:
+ self.cache.pop(key)
def dump(self):
result = {}