def __call__(self, environ, start_response): try: route = environ.get('wsgiorg.routing_args') if route is None: response = Response(status=404) else: action = _get_action(route[1]) if action is None: response = Response(status=404) else: # build a request, augment it with a config context request = Request(environ=environ) context = self.ContextType(request, self.config) request.context = context check_http_auth(request) response = action(request) except BadAuthenticator: response = Response(status=401) except: response = Response(status=500) ex_text = traceback.format_exc() log.error("Unexpected error: %s" % ex_text) if self.config.get('debug', False) == True: response.body = ex_text response.content_type = 'text/plain' return response(environ, start_response)