X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Fcache.py;h=cb795fdc7738849f8cab91f0113565497d60661a;hb=4a9e6751f9f396f463932133b9d62fc925a99ef6;hp=a2ded4a4541ed5dad5147a51b4f39137408c4856;hpb=70f4308757e799aeb96545f5e0a22c96dc8633c2;p=sfa.git diff --git a/sfa/util/cache.py b/sfa/util/cache.py index a2ded4a4..cb795fdc 100644 --- a/sfa/util/cache.py +++ b/sfa/util/cache.py @@ -1,14 +1,15 @@ # # This module implements general purpose caching system # -from __future__ import with_statement + import time import threading import pickle from datetime import datetime -# maximum lifetime of cached data (in seconds) -MAX_CACHE_TTL = 60 * 60 +# maximum lifetime of cached data (in seconds) +DEFAULT_CACHE_TTL = 60 * 60 + class CacheData: @@ -17,7 +18,7 @@ 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) @@ -31,26 +32,25 @@ class CacheData: 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): - with self.lock: + self.expires = self.created + ttl + + def set_data(self, data, renew=True, ttl=DEFAULT_CACHE_TTL): + with self.lock: self.data = data if renew: self.renew(ttl) - + def get_data(self): return self.data - def dump(self): return self.__dict__ def __str__(self): - return str(self.dump()) - + return str(self.dump()) + def tostring(self): return self.__str__() @@ -62,38 +62,38 @@ class CacheData: def __setstate__(self, d): self.__dict__.update(d) self.lock = threading.RLock() - + class Cache: - cache = {} + 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): + if key in self.cache: self.cache[key].set_data(value, ttl=ttl) else: self.cache[key] = CacheData(value, ttl) - + def get(self, key): data = self.cache.get(key) - if not data: + if not data: data = None elif data.is_expired(): self.pop(key) - data = None + data = None else: data = data.get_data() return data def pop(self, key): if key in self.cache: - self.cache.pop(key) + self.cache.pop(key) def dump(self): result = {} @@ -102,15 +102,15 @@ class Cache: return result def __str__(self): - return str(self.dump()) - + return str(self.dump()) + def tostring(self): - return self.__str() + return self.__str() def save_to_file(self, filename): - f = open(filename, 'w') + f = open(filename, 'wb') pickle.dump(self.cache, f) def load_from_file(self, filename): - f = open(filename, 'r') + f = open(filename, 'rb') self.cache = pickle.load(f)