Exemple #1
0
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
Exemple #2
0
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