python3 - 2to3 + miscell obvious tweaks
[sfa.git] / sfa / util / cache.py
index a2ded4a..cb795fd 100644 (file)
@@ -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)