summaryrefslogtreecommitdiffstats
path: root/hyperkitty/lib
diff options
context:
space:
mode:
Diffstat (limited to 'hyperkitty/lib')
-rw-r--r--hyperkitty/lib/__init__.py4
-rw-r--r--hyperkitty/lib/store.py64
2 files changed, 68 insertions, 0 deletions
diff --git a/hyperkitty/lib/__init__.py b/hyperkitty/lib/__init__.py
index be8e27d..710011a 100644
--- a/hyperkitty/lib/__init__.py
+++ b/hyperkitty/lib/__init__.py
@@ -5,6 +5,7 @@ from hashlib import md5
import datetime
from django.conf import settings
+import kittystore
from hyperkitty.utils import log
@@ -41,3 +42,6 @@ def get_months(store, list_name):
archives[now.year] = range(1, 13)[:now.month]
return archives
+
+def get_store(request):
+ return request.environ["kittystore.store"]
diff --git a/hyperkitty/lib/store.py b/hyperkitty/lib/store.py
new file mode 100644
index 0000000..c20c039
--- /dev/null
+++ b/hyperkitty/lib/store.py
@@ -0,0 +1,64 @@
+"""
+WSGI and Django middlewares for KittyStore
+
+Inspired by http://pypi.python.org/pypi/middlestorm
+"""
+
+from threading import local
+
+from django.conf import settings
+import kittystore
+
+
+class KittyStoreWSGIMiddleware(object):
+ """WSGI middleware.
+ Add KittyStore object in environ['kittystore.store']. Each thread contains
+ own store.
+ """
+
+ def __init__(self, app):
+ """Create WSGI middleware.
+ :param app: top level application or middleware.
+ :param database: instance of Database returned create_database.
+ """
+ self._app = app
+ self._local = local()
+
+ def __call__(self, environ, start_response):
+ try:
+ environ['kittystore.store'] = self._local.store
+ except AttributeError:
+ environ['kittystore.store'] = \
+ self._local.__dict__.setdefault('store',
+ kittystore.get_store(settings.KITTYSTORE_URL))
+ try:
+ return self._app(environ, start_response)
+ finally:
+ environ['kittystore.store'].rollback()
+ #environ['kittystore.store'].close()
+
+
+class KittyStoreDjangoMiddleware(object):
+ """Django middleware.
+ Add KittyStore object in environ['kittystore.store']. Each thread contains
+ own store.
+ """
+
+ def __init__(self):
+ """Create Django middleware."""
+ self._local = local()
+
+ def process_request(self, request):
+ try:
+ request.environ['kittystore.store'] = self._local.store
+ except AttributeError:
+ request.environ['kittystore.store'] = \
+ self._local.__dict__.setdefault('store',
+ kittystore.get_store(settings.KITTYSTORE_URL))
+
+ #def process_response(self, request, response):
+ # request.environ['kittystore.store'].close()
+ # return response
+
+ def process_exception(self, request, exception):
+ request.environ['kittystore.store'].rollback()