def middleware(environ, start_response): request = Request(environ).copy() response = request.get_response(django) if response.status_int != 305: return response(environ, start_response) data = json.loads(response.body) proxy = RemoteProxy([data['base_url']], rewrite_links=True) request.environ.pop("HTTP_ACCEPT_ENCODING", None) request.environ['SCRIPT_NAME'] = str(data['script_name']).rstrip("/") request.environ['PATH_INFO'] = "/" + str(data['path_info'].lstrip("/") ) from Cookie import SimpleCookie as Cookie orig_cookie = cookie = request.environ.get('HTTP_COOKIE') if cookie: cookie = Cookie(cookie) for key in data['cookie_blacklist']: cookie.pop(key, None) cookiestr = [] for key, value in cookie.items(): cookiestr.append(value.OutputString()) cookiestr = "; ".join(cookiestr) request.environ['HTTP_COOKIE'] = cookiestr request.environ['HTTP_X_THING_THEME'] = data['theme'] filter = deliverance(proxy) def per_project_theme(environ): return "%(wsgi.url_scheme)s://%(HTTP_HOST)s%(HTTP_X_THING_THEME)s" % environ filter.default_theme = per_project_theme filter.rule_getter = TemplateRuleGetter(data['deliverance_rules']) filter.use_internal_subrequest = lambda *args, **kw: False base_subrequest = filter.build_external_subrequest def build_external_subrequest(url, orig_req, log): subreq = base_subrequest(url, orig_req, log) if url.endswith("/theme/") and orig_cookie: subreq.environ['HTTP_COOKIE'] = orig_cookie return subreq filter.build_external_subrequest = build_external_subrequest resp = request.get_response(filter) return resp(request.environ, start_response)