def __call__(self, environ, start_response): request = Request(environ) for sub in self.subs: log.debug('try to match %s' % sub) # first match the domain if any try to match the path path_match, sub = self._match_path(dict(), request.path, [sub]) if not sub: continue # found the good sub request.path_match = path_match for middleware in self.middlewares: maybe_response = middleware.process_request_before_view(self, request) if isinstance(maybe_response, Response): return maybe_response(environ, start_response) try: response = sub(request) except Exception: # XXX: improve this print_exc() response = self.internal_server_error(request) for middleware in self.middlewares: maybe_response = middleware.process_response_before_answer(self, request, response) if isinstance(maybe_response, Response): return maybe_response(environ, start_response) return response(environ, start_response) else: for middleware in self.middlewares: maybe_response = middleware.process_response_before_answer(self, request, response) if isinstance(maybe_response, Response): return maybe_response(environ, start_response) return response(environ, start_response) response = self.not_found(request) for middleware in self.middlewares: maybe_response = middleware.process_response_before_answer(self, request, response) if isinstance(maybe_response, Response): return maybe_response(environ, start_response) return response(environ, start_response)