Merge branch 'master' of ssh://git.planet-lab.org/git/sfa
[sfa.git] / sfa / util / cache.py
index daaf443..a2ded4a 100644 (file)
@@ -44,6 +44,16 @@ class CacheData:
     def get_data(self):
         return self.data
 
+
+    def dump(self):
+        return self.__dict__
+
+    def __str__(self):
+        return str(self.dump())  
+        
+    def tostring(self):
+        return self.__str__()
+
     def __getstate__(self):
         d = dict(self.__dict__)
         del d['lock']
@@ -58,6 +68,10 @@ class 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):
         with self.lock:
@@ -68,9 +82,30 @@ class Cache:
            
     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 = {}
+        for key in self.cache:
+            result[key] = self.cache[key].__getstate__()
+        return result
+
+    def __str__(self):
+        return str(self.dump())     
+    def tostring(self):
+        return self.__str()    
 
     def save_to_file(self, filename):
         f = open(filename, 'w')