import redis import pickle import sys # load some django settings here some day class StorageError(Exception): pass def storage_error(typ): return type('Storage%sError' % typ.__name__, (typ, StorageError), {}) def raise_storage_error(): typ, value, trace = sys.exc_info() raise storage_error(typ), value, trace class Storage: key_prefix = 'sublab_monitor.' def __init__(self, app_prefix): self.key_prefix += '%s.' % app_prefix try: self.redis = redis.StrictRedis() except redis.RedisError: raise_storage_error() def key(self, key): return '%s%s' % (self.key_prefix, key) def get(self, key): lookup_key = self.key(key) try: entry = self.redis.get(lookup_key) except redis.RedisError: raise_storage_error() if entry is None: return None try: return pickle.loads(entry) except pickle.PickleError: raise_storage_error() def set(self, key, value): lookup_key = self.key(key) try: entry = pickle.dumps(value) except pickle.PickleError: raise_storage_error() try: self.redis.set(lookup_key, entry) except redis.RedisError: raise_storage_error()