summaryrefslogtreecommitdiff
path: root/sublab_project/sublab_monitor/storage.py
diff options
context:
space:
mode:
authorChristian Franke <nobody@nowhere.ws>2012-01-11 09:49:53 +0100
committerChristian Franke <nobody@nowhere.ws>2012-01-11 09:49:53 +0100
commit9a94e0095a51981cc668ac0269667a307c45923c (patch)
tree76a92a43a24b0a7b376912e310353677c746c074 /sublab_project/sublab_monitor/storage.py
parentfff2edd3a10a7f9585d4a734740420256246b9b5 (diff)
add network_monitor
Diffstat (limited to 'sublab_project/sublab_monitor/storage.py')
-rw-r--r--sublab_project/sublab_monitor/storage.py63
1 files changed, 63 insertions, 0 deletions
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()