def __call__(self, environ, start_response): req = Request(environ) path_info = req.path_info if path_info.startswith("/__callback__"): path_info = path_info[1:] if path_info in self.CALLBACK_REGISTRY: callback = self.CALLBACK_REGISTRY[path_info] req.make_body_seekable() auth_req = req.copy() auth_response = callback.authorization(callback, auth_req) if "200" in auth_response.status: req.body_file.seek(0) return callback(req)(environ, start_response) else: req.body_file.seek(0) return auth_response(environ, start_response) return Response(status="404 Not Found")(environ, start_response) else: resp = self.serve_file(req) resp = resp or Response(status="404 Not Found") return resp(environ, start_response)
def m(environ, start_response): request = Request(environ) response = request.get_response(app) assert_(request.copy(), response.copy()) return response(environ, start_response)
def __call__(self, environ, start_response): req = Request(environ) if self.notheme_request(req): return self.app(environ, start_response) req.environ['deliverance.base_url'] = req.application_url ## FIXME: copy_get?: orig_req = Request(environ.copy()) if 'deliverance.log' in req.environ: log = req.environ['deliverance.log'] else: log = self.log_factory(req, self, **self.log_factory_kw) ## FIXME: should this be put in both the orig_req and this req? req.environ['deliverance.log'] = log def resource_fetcher(url, retry_inner_if_not_200=False): """ Return the Response object for the given URL """ return self.get_resource(url, orig_req, log, retry_inner_if_not_200) if req.path_info_peek() == '.deliverance': req.path_info_pop() resp = self.internal_app(req, resource_fetcher) return resp(environ, start_response) rule_set = self.rule_getter(resource_fetcher, self.app, orig_req) clientside = rule_set.check_clientside(req, log) if clientside and req.url in self.known_html: if req.cookies.get('jsEnabled'): log.debug(self, 'Responding to %s with a clientside theme' % req.url) return self.clientside_response(req, rule_set, resource_fetcher, log)(environ, start_response) else: log.debug( self, 'Not doing clientside theming because jsEnabled cookie not set' ) head_response = None if req.method == "HEAD": # We need to copy the request instead of reusing it, # in case the downstream app modifies req.environ in-place head_req = req.copy() head_response = head_req.get_response(self.app) req.method = "GET" resp = req.get_response(self.app) ## FIXME: also XHTML? if resp.content_type != 'text/html': ## FIXME: remove from known_html? return resp(environ, start_response) # XXX: Not clear why such responses would have a content type, but # they sometimes do (from Zope/Plone, at least) and that then breaks # when trying to apply a theme. if resp.status_int in (301, 302, 304): return resp(environ, start_response) if resp.content_length == 0: return resp(environ, start_response) if resp.body == '': return resp(environ, start_response) if clientside and req.url not in self.known_html: log.debug( self, '%s would have been a clientside check; in future will be since we know it is HTML' % req.url) self.known_titles[req.url] = self._get_title(resp.body) self.known_html.add(req.url) resp = rule_set.apply_rules(req, resp, resource_fetcher, log, default_theme=self.default_theme(environ)) if clientside: resp.decode_content() resp.body = self._substitute_jsenable(resp.body) resp = log.finish_request(req, resp) if head_response: head_response.headers = resp.headers resp = head_response return resp(environ, start_response)
def __call__(self, environ, start_response): req = Request(environ) if self.notheme_request(req): return self.app(environ, start_response) req.environ['deliverance.base_url'] = req.application_url ## FIXME: copy_get?: orig_req = Request(environ.copy()) if 'deliverance.log' in req.environ: log = req.environ['deliverance.log'] else: log = self.log_factory(req, self, **self.log_factory_kw) ## FIXME: should this be put in both the orig_req and this req? req.environ['deliverance.log'] = log def resource_fetcher(url, retry_inner_if_not_200=False): """ Return the Response object for the given URL """ return self.get_resource(url, orig_req, log, retry_inner_if_not_200) if req.path_info_peek() == '.deliverance': req.path_info_pop() resp = self.internal_app(req, resource_fetcher) return resp(environ, start_response) rule_set = self.rule_getter(resource_fetcher, self.app, orig_req) clientside = rule_set.check_clientside(req, log) if clientside and req.url in self.known_html: if req.cookies.get('jsEnabled'): log.debug(self, 'Responding to %s with a clientside theme' % req.url) return self.clientside_response(req, rule_set, resource_fetcher, log)(environ, start_response) else: log.debug(self, 'Not doing clientside theming because jsEnabled cookie not set') head_response = None if req.method == "HEAD": # We need to copy the request instead of reusing it, # in case the downstream app modifies req.environ in-place head_req = req.copy() head_response = head_req.get_response(self.app) req.method = "GET" resp = req.get_response(self.app) ## FIXME: also XHTML? if resp.content_type != 'text/html': ## FIXME: remove from known_html? return resp(environ, start_response) # XXX: Not clear why such responses would have a content type, but # they sometimes do (from Zope/Plone, at least) and that then breaks # when trying to apply a theme. if resp.status_int in (301, 302, 304): return resp(environ, start_response) if resp.content_length == 0: return resp(environ, start_response) if resp.body == '': return resp(environ, start_response) if clientside and req.url not in self.known_html: log.debug(self, '%s would have been a clientside check; in future will be since we know it is HTML' % req.url) self.known_titles[req.url] = self._get_title(resp.body) self.known_html.add(req.url) resp = rule_set.apply_rules(req, resp, resource_fetcher, log, default_theme=self.default_theme(environ)) if clientside: resp.decode_content() resp.body = self._substitute_jsenable(resp.body) resp = log.finish_request(req, resp) if head_response: head_response.headers = resp.headers resp = head_response return resp(environ, start_response)