Ejemplo n.º 1
0
    def test_multiple_values(self, request_factory, request):
        request = request_factory("GET",
                                  "/",
                                  subdomain="www",
                                  query_string="a=b&a=c")

        openapi_request = FlaskOpenAPIRequest(request)

        path = {}
        query = ImmutableMultiDict([
            ("a", "b"),
            ("a", "c"),
        ])
        headers = Headers(request.headers)
        cookies = {}
        assert openapi_request.parameters == RequestParameters(
            path=path,
            query=query,
            header=headers,
            cookie=cookies,
        )
        assert openapi_request.method == request.method.lower()
        assert openapi_request.full_url_pattern == urljoin(
            request.host_url, request.path)
        assert openapi_request.body == request.data
        assert openapi_request.mimetype == request.mimetype
Ejemplo n.º 2
0
    def test_multiple_values(self, request_factory, request):
        request = request_factory('GET',
                                  '/',
                                  subdomain='www',
                                  query_string='a=b&a=c')

        openapi_request = FlaskOpenAPIRequest(request)

        path = {}
        query = ImmutableMultiDict([
            ('a', 'b'),
            ('a', 'c'),
        ])
        headers = EnvironHeaders(request.environ)
        cookies = {}
        assert openapi_request.parameters == RequestParameters(
            path=path,
            query=query,
            header=headers,
            cookie=cookies,
        )
        assert openapi_request.host_url == request.host_url
        assert openapi_request.path == request.path
        assert openapi_request.method == request.method.lower()
        assert openapi_request.path_pattern == request.path
        assert openapi_request.body == request.data
        assert openapi_request.mimetype == request.mimetype
Ejemplo n.º 3
0
 def test_response_validator_path_pattern(self, flask_spec, request_factory,
                                          response_factory):
     validator = ResponseValidator(flask_spec)
     request = request_factory('GET', '/browse/12/', subdomain='kb')
     openapi_request = FlaskOpenAPIRequest(request)
     response = response_factory('Some item', status_code=200)
     openapi_response = FlaskOpenAPIResponse(response)
     result = validator.validate(openapi_request, openapi_response)
     assert not result.errors
Ejemplo n.º 4
0
 def test_response_validator_path_pattern(self, flask_spec, request_factory,
                                          response_factory):
     validator = ResponseValidator(flask_spec)
     request = request_factory("GET", "/browse/12/", subdomain="kb")
     openapi_request = FlaskOpenAPIRequest(request)
     response = response_factory(
         '{"data": "data"}',
         status_code=200,
         headers={"X-Rate-Limit": "12"},
     )
     openapi_response = FlaskOpenAPIResponse(response)
     result = validator.validate(openapi_request, openapi_response)
     assert not result.errors
Ejemplo n.º 5
0
    def validate(*args, **kwargs):

        if ENABLE_OPENAPI_VALIDATION:
            spec = get_openapi_spec()
            openapi_request = FlaskOpenAPIRequest(request)
            validator = RequestValidator(spec)
            result = validator.validate(openapi_request)
            result.raise_for_errors()

        response = function(*args, **kwargs)

        if ENABLE_OPENAPI_VALIDATION:
            openapi_response = FlaskOpenAPIResponse(response)
            validator = ResponseValidator(spec)
            result = validator.validate(openapi_request, openapi_response)
            result.raise_for_errors()

        return response
Ejemplo n.º 6
0
    def test_url_rule(self, request_factory, request):
        request = request_factory("GET", "/browse/12/", subdomain="kb")

        openapi_request = FlaskOpenAPIRequest(request)

        path = {"id": 12}
        query = ImmutableMultiDict([])
        headers = Headers(request.headers)
        cookies = {}
        assert openapi_request.parameters == RequestParameters(
            path=path,
            query=query,
            header=headers,
            cookie=cookies,
        )
        assert openapi_request.method == request.method.lower()
        assert openapi_request.full_url_pattern == urljoin(
            request.host_url, "/browse/{id}/")
        assert openapi_request.body == request.data
        assert openapi_request.mimetype == request.mimetype
Ejemplo n.º 7
0
    def test_simple(self, request_factory, request):
        request = request_factory('GET', '/', subdomain='www')

        openapi_request = FlaskOpenAPIRequest(request)

        path = {}
        query = ImmutableMultiDict([])
        headers = EnvironHeaders(request.environ)
        cookies = {}
        assert openapi_request.parameters == RequestParameters(
            path=path,
            query=query,
            header=headers,
            cookie=cookies,
        )
        assert openapi_request.method == request.method.lower()
        assert openapi_request.full_url_pattern == \
            urljoin(request.host_url, request.path)
        assert openapi_request.body == request.data
        assert openapi_request.mimetype == request.mimetype
Ejemplo n.º 8
0
    def test_url_rule(self, request_factory, request):
        request = request_factory('GET', '/browse/12/', subdomain='kb')

        openapi_request = FlaskOpenAPIRequest(request)

        path = {'id': 12}
        query = ImmutableMultiDict([])
        headers = EnvironHeaders(request.environ)
        cookies = {}
        assert openapi_request.parameters == RequestParameters(
            path=path,
            query=query,
            header=headers,
            cookie=cookies,
        )
        assert openapi_request.host_url == request.host_url
        assert openapi_request.path == request.path
        assert openapi_request.method == request.method.lower()
        assert openapi_request.path_pattern == '/browse/{id}/'
        assert openapi_request.body == request.data
        assert openapi_request.mimetype == request.mimetype
Ejemplo n.º 9
0
        def wrapper_validate(*args, **kwargs):
            try:
                data = request.get_json()
            except BadRequest:
                result = "The request body is not a well-formed JSON."
                log.debug("create_circuit result %s %s", result, 400)
                raise BadRequest(result) from BadRequest
            if data is None:
                result = "The request body mimetype is not application/json."
                log.debug("update result %s %s", result, 415)
                raise UnsupportedMediaType(result)

            validator = RequestValidator(spec)
            openapi_request = FlaskOpenAPIRequest(request)
            result = validator.validate(openapi_request)
            if result.errors:
                errors = result.errors[0]
                if hasattr(errors, "schema_errors"):
                    schema_errors = errors.schema_errors[0]
                    error_log = {
                        "error_message": schema_errors.message,
                        "error_validator": schema_errors.validator,
                        "error_validator_value": schema_errors.validator_value,
                        "error_path": list(schema_errors.path),
                        "error_schema": schema_errors.schema,
                        "error_schema_path": list(schema_errors.schema_path),
                    }
                    log.debug("error response: %s", error_log)
                    error_response = f"{schema_errors.message} for field"
                    error_response += (
                        f" {'/'.join(map(str,schema_errors.path))}."
                    )
                else:
                    error_response = (
                        "The request body mimetype is not application/json."
                    )
                raise BadRequest(error_response) from BadRequest
            return func(*args, data=data, **kwargs)
Ejemplo n.º 10
0
 def test_request_validator_path_pattern(self, flask_spec, request_factory):
     validator = RequestValidator(flask_spec)
     request = request_factory("GET", "/browse/12/", subdomain="kb")
     openapi_request = FlaskOpenAPIRequest(request)
     result = validator.validate(openapi_request)
     assert not result.errors
Ejemplo n.º 11
0
def _validate_request() -> Tuple[Any, Any]:
    ret = _request_validator.validate(FlaskOpenAPIRequest(request))
    if ret.errors:
        abort(400)
    return ret.parameters, ret.body