def _call_controller_method(controller, route: Route, request: Request): method = route.method method_exceptions_manager = MethodExceptionsManager(method) response_headers = {} throttle_class = create_throttle_class(route) try: if throttle_class and not throttle_class.allow_request(request): raise ThrottleException() arguments = arguments_resolver.resolve_arguments( method, request, response_headers) result = method(controller, **arguments) except method_exceptions_manager.exception_classes as exception: handler = method_exceptions_manager.get_handler(exception) if handler is None: raise method = ComponentMethod.get_or_create(handler.__class__.handle) arguments = arguments_resolver.resolve_arguments( method, request, response_headers, { 'exception': exception, 'response_headers': response_headers, }) result = method(handler, **arguments) response = convert_result_to_http_response(request, result, method) _fill_response_headers(response, response_headers) return response
def build_responses_schemas(route: Route): responses = {} http_method = route.http_method response_status = str( get_default_response_status(http_method, route.method)) responses[response_status] = build_response_schema(route.method) method_exceptions_manager = MethodExceptionsManager(route.method) for exception_cls in method_exceptions_manager.declared_exception_classes: handler = method_exceptions_manager.get_handler(exception_cls) if handler is None: handler = exception_handlers_registry.get_handler(exception_cls) if handler is None: continue handle_method = ComponentMethod.get_or_create(handler.__class__.handle) response_status = str( get_default_response_status(http_method, handle_method)) responses[response_status] = build_response_schema(handle_method) return responses