|
@@ -1,5 +1,6 @@
|
|
|
"""celery.backends.base"""
|
|
|
import time
|
|
|
+from UserDict import UserDict
|
|
|
|
|
|
from billiard.serialization import pickle
|
|
|
from billiard.serialization import get_pickled_exception
|
|
@@ -9,6 +10,39 @@ from celery.exceptions import TimeoutError
|
|
|
from celery import states
|
|
|
|
|
|
|
|
|
+class Cache(object):
|
|
|
+
|
|
|
+ def __init__(self, expire=None):
|
|
|
+ self.expire = expire
|
|
|
+ self.timestamps = {}
|
|
|
+ self.data = {}
|
|
|
+
|
|
|
+ def __getitem__(self, key):
|
|
|
+ timestamp = self.timestamps[key]
|
|
|
+ if self.expire and timestamp + time.time() > self.expire:
|
|
|
+ self.data.pop(key, None)
|
|
|
+ else:
|
|
|
+ return self.data[key]
|
|
|
+ raise KeyError(key)
|
|
|
+
|
|
|
+ def __setitem__(self, key, value):
|
|
|
+ self.timestamps[key] = time.time()
|
|
|
+ self.data[key] = value
|
|
|
+
|
|
|
+ def __contains__(self, key):
|
|
|
+ if key not in self.data:
|
|
|
+ return False
|
|
|
+ try:
|
|
|
+ self[key]
|
|
|
+ except KeyError:
|
|
|
+ return False
|
|
|
+ else:
|
|
|
+ return True
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
class BaseBackend(object):
|
|
|
"""The base backend class. All backends should inherit from this."""
|
|
|
|