diff options
author | Aurélien Bompard <aurelien@bompard.org> | 2013-11-14 18:27:47 +0100 |
---|---|---|
committer | Aurélien Bompard <aurelien@bompard.org> | 2013-11-20 19:15:40 +0100 |
commit | 54e10ee28d7c72f5614219e92adcc460a3b72a48 (patch) | |
tree | 07cb7af58e716231d538f749af9f396302c0ffca /hyperkitty/middleware.py | |
parent | 89406e71d9541396a48370d48e40f5e6c1e4a357 (diff) | |
download | hyperkitty-54e10ee28d7c72f5614219e92adcc460a3b72a48.tar.gz hyperkitty-54e10ee28d7c72f5614219e92adcc460a3b72a48.tar.xz hyperkitty-54e10ee28d7c72f5614219e92adcc460a3b72a48.zip |
KittyStore does not auto-upgrade its schema anymore
Diffstat (limited to 'hyperkitty/middleware.py')
-rw-r--r-- | hyperkitty/middleware.py | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/hyperkitty/middleware.py b/hyperkitty/middleware.py index 823dd88..4f48e37 100644 --- a/hyperkitty/middleware.py +++ b/hyperkitty/middleware.py @@ -20,6 +20,10 @@ # Author: Aurelien Bompard <abompard@fedoraproject.org> # + +from django.conf import settings + + class PaginationMiddleware(object): """ Inserts a variable representing the current page onto the request object if @@ -33,9 +37,52 @@ class PaginationMiddleware(object): +# KittyStore + +from threading import local +from django.shortcuts import redirect +from django.core.urlresolvers import reverse +import kittystore + +class KittyStoreDjangoMiddleware(object): + """Django middleware. + Add KittyStore object in environ['kittystore.store']. Each thread contains + own store. + Inspired by http://pypi.python.org/pypi/middlestorm + """ + + def __init__(self): + """Create Django middleware.""" + self._local = local() + + def process_request(self, request): + if request.path == reverse("error_schemaupgrade"): + return # Display the error page + try: + request.environ['kittystore.store'] = self._local.store + except AttributeError: + try: + store = kittystore.get_store(settings) + except kittystore.SchemaUpgradeNeeded: + return redirect("error_schemaupgrade") + else: + request.environ['kittystore.store'] = \ + self._local.__dict__.setdefault('store', store) + + def process_response(self, request, response): + if "kittystore.store" in request.environ: + # kittystore.store could be absent on automatic redirects for ex. + request.environ['kittystore.store'].commit() + #request.environ['kittystore.store'].close() + return response + + def process_exception(self, request, exception): + request.environ['kittystore.store'].rollback() + + + # http://stackoverflow.com/questions/2799450/django-https-for-just-login-page -from django.conf import settings from django.http import HttpResponsePermanentRedirect SSL = 'SSL' @@ -97,7 +144,6 @@ class TimezoneMiddleware(object): from mailmanclient import Client as MailmanClient from mailmanclient import MailmanConnectionError -from django.conf import settings class MailmanUserMetadata(object): |