From d4367d43a0ac54677eb2493e150342000bff54ee Mon Sep 17 00:00:00 2001 From: Brook Elgie Date: Thu, 26 May 2016 13:25:12 +0100 Subject: [PATCH] Use Beaker for Flask session interface --- ckan/common.py | 25 ++++++++++++++++++++++++- ckan/config/middleware.py | 13 +++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/ckan/common.py b/ckan/common.py index eed8537c1cd..0aafa71afae 100644 --- a/ckan/common.py +++ b/ckan/common.py @@ -12,7 +12,7 @@ from flask.ext.babel import gettext as flask_gettext from pylons.i18n import _ as pylons_gettext, ungettext -from pylons import g, session, response +from pylons import g, response import simplejson as json try: @@ -87,3 +87,26 @@ def __delattr__(self, name): c = PylonsStyleContext() + + +class Session(): + + def __getattr__(self, name): + if is_flask(): + return getattr(flask.session, name, None) + else: + return getattr(pylons.session, name, None) + + def __setattr__(self, name, value): + if is_flask(): + return setattr(flask.session, name, value) + else: + return setattr(pylons.session, name, value) + + def __delattr__(self, name): + if is_flask(): + return delattr(flask.session, name, None) + else: + return delattr(pylons.session, name, None) + +session = Session() diff --git a/ckan/config/middleware.py b/ckan/config/middleware.py index d3012d935f9..19ca8311ec3 100644 --- a/ckan/config/middleware.py +++ b/ckan/config/middleware.py @@ -28,6 +28,7 @@ from flask import request as flask_request from flask import _request_ctx_stack from flask.ctx import _AppCtxGlobals +from flask.sessions import SessionInterface from werkzeug.exceptions import HTTPException from werkzeug.test import create_environ, run_wsgi_app from flask.ext.babel import Babel @@ -260,6 +261,18 @@ def make_flask_stack(conf, **app_conf): # Do all the Flask-specific stuff before adding other middlewares + # Use Beaker as the Flask session interface + class BeakerSessionInterface(SessionInterface): + def open_session(self, app, request): + session = request.environ['beaker.session'] + return session + + def save_session(self, app, session, response): + session.save() + + app.wsgi_app = SessionMiddleware(app.wsgi_app) + app.session_interface = BeakerSessionInterface() + # secret key needed for flask-debug-toolbar app.config['SECRET_KEY'] = '' app.config['DEBUG_TB_INTERCEPT_REDIRECTS'] = False