From 9a94e0095a51981cc668ac0269667a307c45923c Mon Sep 17 00:00:00 2001 From: Christian Franke Date: Wed, 11 Jan 2012 09:49:53 +0100 Subject: add network_monitor --- sublab_project/sublab_monitor/storage.py | 63 ++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 sublab_project/sublab_monitor/storage.py (limited to 'sublab_project/sublab_monitor/storage.py') diff --git a/sublab_project/sublab_monitor/storage.py b/sublab_project/sublab_monitor/storage.py new file mode 100644 index 0000000..8b3e385 --- /dev/null +++ b/sublab_project/sublab_monitor/storage.py @@ -0,0 +1,63 @@ +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() -- cgit v1.2.1