def _finish_call_backend(self, request, environ, start_response): # Log user out if authentication_disabled no_auth_logout(request) request.controller_name = None try: found_rule, url_values = request.map_adapter.match( return_rule=True) request.matchdict = url_values except RequestRedirect as response: # Deal with 301 responses eg due to missing final slash return response(environ, start_response) except HTTPException as exc: # Stop and render exception return render_http_exception(request, exc, exc.get_description(environ))( environ, start_response) controller = endpoint_to_controller(found_rule) # Make a reference to the controller's symbolic name on the request... # used for lazy context modification request.controller_name = found_rule.endpoint ## TODO: get rid of meddleware, turn it into hooks only # pass the request through our meddleware classes try: for m in self.meddleware: response = m.process_request(request, controller) if response is not None: return response(environ, start_response) except HTTPException as e: return render_http_exception( request, e, e.get_description(environ))(environ, start_response) request = hook_transform("modify_request", request) request.start_response = start_response # get the Http response from the controller try: response = controller(request) except HTTPException as e: response = render_http_exception(request, e, e.get_description(environ)) # pass the response through the meddlewares try: for m in self.meddleware[::-1]: m.process_response(request, response) except HTTPException as e: response = render_http_exception(request, e, e.get_description(environ)) self.session_manager.save_session_to_cookie(request.session, request, response) return response(environ, start_response)
def _finish_call_backend(self, request, environ, start_response): # Log user out if authentication_disabled no_auth_logout(request) request.controller_name = None try: found_rule, url_values = request.map_adapter.match(return_rule=True) request.matchdict = url_values except RequestRedirect as response: # Deal with 301 responses eg due to missing final slash return response(environ, start_response) except HTTPException as exc: # Stop and render exception return render_http_exception( request, exc, exc.get_description(environ))(environ, start_response) controller = endpoint_to_controller(found_rule) # Make a reference to the controller's symbolic name on the request... # used for lazy context modification request.controller_name = found_rule.endpoint ## TODO: get rid of meddleware, turn it into hooks only # pass the request through our meddleware classes try: for m in self.meddleware: response = m.process_request(request, controller) if response is not None: return response(environ, start_response) except HTTPException as e: return render_http_exception( request, e, e.get_description(environ))(environ, start_response) request = hook_transform("modify_request", request) request.start_response = start_response # get the Http response from the controller try: response = controller(request) except HTTPException as e: response = render_http_exception( request, e, e.get_description(environ)) # pass the response through the meddlewares try: for m in self.meddleware[::-1]: m.process_response(request, response) except HTTPException as e: response = render_http_exception( request, e, e.get_description(environ)) self.session_manager.save_session_to_cookie( request.session, request, response) return response(environ, start_response)
def call_backend(self, environ, start_response): request = Request(environ) # Compatibility with django, use request.args preferrably request.GET = request.args ## Routing / controller loading stuff map_adapter = self.url_map.bind_to_environ(request.environ) # By using fcgi, mediagoblin can run under a base path # like /mediagoblin/. request.path_info contains the # path inside mediagoblin. If the something needs the # full path of the current page, that should include # the basepath. # Note: urlgen and routes are fine! request.full_path = environ["SCRIPT_NAME"] + request.path # python-routes uses SCRIPT_NAME. So let's use that too. # The other option would be: # request.full_path = environ["SCRIPT_URL"] # Fix up environ for urlgen # See bug: https://bitbucket.org/bbangert/routes/issue/55/cache_hostinfo-breaks-on-https-off if environ.get('HTTPS', '').lower() == 'off': environ.pop('HTTPS') ## Attach utilities to the request object # Do we really want to load this via middleware? Maybe? session_manager = self.session_manager request.session = session_manager.load_session_from_cookie(request) # Attach self as request.app # Also attach a few utilities from request.app for convenience? request.app = self request.db = self.db request.staticdirect = self.staticdirector request.locale = translate.get_locale_from_request(request) request.template_env = template.get_jinja_env( self.template_loader, request.locale) def build_proxy(endpoint, **kw): try: qualified = kw.pop('qualified') except KeyError: qualified = False return map_adapter.build( endpoint, values=dict(**kw), force_external=qualified) request.urlgen = build_proxy # Log user out if authentication_disabled no_auth_logout(request) mg_request.setup_user_in_request(request) request.controller_name = None try: found_rule, url_values = map_adapter.match(return_rule=True) request.matchdict = url_values except RequestRedirect as response: # Deal with 301 responses eg due to missing final slash return response(environ, start_response) except HTTPException as exc: # Stop and render exception return render_http_exception( request, exc, exc.get_description(environ))(environ, start_response) controller = endpoint_to_controller(found_rule) # Make a reference to the controller's symbolic name on the request... # used for lazy context modification request.controller_name = found_rule.endpoint # pass the request through our meddleware classes try: for m in self.meddleware: response = m.process_request(request, controller) if response is not None: return response(environ, start_response) except HTTPException as e: return render_http_exception( request, e, e.get_description(environ))(environ, start_response) request = hook_transform("modify_request", request) request.start_response = start_response # get the Http response from the controller try: response = controller(request) except HTTPException as e: response = render_http_exception( request, e, e.get_description(environ)) # pass the response through the meddlewares try: for m in self.meddleware[::-1]: m.process_response(request, response) except HTTPException as e: response = render_http_exception( request, e, e.get_description(environ)) session_manager.save_session_to_cookie(request.session, request, response) return response(environ, start_response)