2 # This module implements general purpose caching system
4 from __future__ import with_statement
7 from datetime import datetime
9 # maximum lifetime of cached data (in seconds)
10 MAX_CACHE_TTL = 60 * 60
19 def __init__(self, data, ttl = MAX_CACHE_TTL):
20 self.lock = threading.RLock()
25 return time.time() > self.expires
27 def get_created_date(self):
28 return str(datetime.fromtimestamp(self.created))
30 def get_expires_date(self):
31 return str(datetime.fromtimestamp(self.expires))
33 def renew(self, ttl = MAX_CACHE_TTL):
34 self.created = time.time()
35 self.expires = self.created + ttl
37 def set_data(self, data, renew=True, ttl = MAX_CACHE_TTL):
49 lock = threading.RLock()
51 def add(self, key, value, ttl = MAX_CACHE_TTL):
53 if self.cache.has_key(key):
54 self.cache[key].set_data(value, ttl=ttl)
56 self.cache[key] = CacheData(value, ttl)
59 data = self.cache.get(key)
60 if not data or data.is_expired():
62 return data.get_data()