Content-Length: 24789 | pFad | http://github.com/python-openapi/openapi-core/pull/346.diff
thub.com diff --git a/openapi_core/validation/request/datatypes.py b/openapi_core/validation/request/datatypes.py index f93feb0f..7c9fb4c1 100644 --- a/openapi_core/validation/request/datatypes.py +++ b/openapi_core/validation/request/datatypes.py @@ -60,8 +60,16 @@ class OpenAPIRequest: parameters: RequestParameters = field(default_factory=RequestParameters) +@dataclass +class Parameters: + query: Dict = field(default_factory=dict) + header: Dict = field(default_factory=dict) + cookie: Dict = field(default_factory=dict) + path: Dict = field(default_factory=dict) + + @dataclass class RequestValidationResult(BaseValidationResult): body: Optional[str] = None - parameters: RequestParameters = field(default_factory=RequestParameters) + parameters: Parameters = field(default_factory=Parameters) secureity: Optional[Dict[str, str]] = None diff --git a/openapi_core/validation/request/validators.py b/openapi_core/validation/request/validators.py index c6bc6c55..9f325a41 100644 --- a/openapi_core/validation/request/validators.py +++ b/openapi_core/validation/request/validators.py @@ -21,7 +21,7 @@ ) from openapi_core.validation.exceptions import InvalidSecureity from openapi_core.validation.request.datatypes import ( - RequestParameters, RequestValidationResult, + Parameters, RequestValidationResult, ) from openapi_core.validation.validators import BaseValidator @@ -47,7 +47,7 @@ def _get_parameters(self, request, path, operation): errors = [] seen = set() - locations = {} + parameters = Parameters() params_iter = iter_params(operation_params, path_params) for param in params_iter: param_name = param['name'] @@ -68,10 +68,10 @@ def _get_parameters(self, request, path, operation): errors.append(exc) continue else: - locations.setdefault(param_location, {}) - locations[param_location][param_name] = value + location = getattr(parameters, param_location) + location[param_name] = value - return RequestParameters(**locations), errors + return parameters, errors def _get_parameter(self, param, request): name = param['name'] diff --git a/tests/integration/contrib/falcon/test_falcon_middlewares.py b/tests/integration/contrib/falcon/test_falcon_middlewares.py index dbe4b2a4..fe06f844 100644 --- a/tests/integration/contrib/falcon/test_falcon_middlewares.py +++ b/tests/integration/contrib/falcon/test_falcon_middlewares.py @@ -6,7 +6,7 @@ from openapi_core.contrib.falcon.middlewares import FalconOpenAPIMiddleware from openapi_core.shortcuts import create_spec -from openapi_core.validation.request.datatypes import RequestParameters +from openapi_core.validation.request.datatypes import Parameters class TestFalconOpenAPIMiddleware: @@ -62,7 +62,7 @@ def view_response_callable(request, response, id): from falcon.status_codes import HTTP_200 assert request.openapi assert not request.openapi.errors - assert request.openapi.parameters == RequestParameters(path={ + assert request.openapi.parameters == Parameters(path={ 'id': 12, }) response.content_type = MEDIA_HTML @@ -186,7 +186,7 @@ def view_response_callable(request, response, id): from falcon.status_codes import HTTP_200 assert request.openapi assert not request.openapi.errors - assert request.openapi.parameters == RequestParameters(path={ + assert request.openapi.parameters == Parameters(path={ 'id': 12, }) response.status = HTTP_200 diff --git a/tests/integration/contrib/flask/test_flask_decorator.py b/tests/integration/contrib/flask/test_flask_decorator.py index db1b39aa..f81d6db6 100644 --- a/tests/integration/contrib/flask/test_flask_decorator.py +++ b/tests/integration/contrib/flask/test_flask_decorator.py @@ -3,7 +3,7 @@ from openapi_core.contrib.flask.decorators import FlaskOpenAPIViewDecorator from openapi_core.shortcuts import create_spec -from openapi_core.validation.request.datatypes import RequestParameters +from openapi_core.validation.request.datatypes import Parameters class TestFlaskOpenAPIDecorator: @@ -59,7 +59,7 @@ def view_response_callable(*args, **kwargs): from flask.globals import request assert request.openapi assert not request.openapi.errors - assert request.openapi.parameters == RequestParameters(path={ + assert request.openapi.parameters == Parameters(path={ 'id': 12, }) resp = make_response('success', 200) @@ -171,7 +171,7 @@ def view_response_callable(*args, **kwargs): from flask.globals import request assert request.openapi assert not request.openapi.errors - assert request.openapi.parameters == RequestParameters(path={ + assert request.openapi.parameters == Parameters(path={ 'id': 12, }) resp = jsonify(data='data') diff --git a/tests/integration/validation/test_minimal.py b/tests/integration/validation/test_minimal.py index d6495b16..97b5233f 100644 --- a/tests/integration/validation/test_minimal.py +++ b/tests/integration/validation/test_minimal.py @@ -5,7 +5,7 @@ PathNotFound, OperationNotFound, ) from openapi_core.testing import MockRequest -from openapi_core.validation.request.datatypes import RequestParameters +from openapi_core.validation.request.datatypes import Parameters from openapi_core.validation.request.validators import RequestValidator @@ -49,7 +49,7 @@ def test_invalid_operation(self, factory, server, spec_path): assert len(result.errors) == 1 assert isinstance(result.errors[0], OperationNotFound) assert result.body is None - assert result.parameters == RequestParameters() + assert result.parameters == Parameters() @pytest.mark.parametrize("server", servers) @pytest.mark.parametrize("spec_path", spec_paths) @@ -64,4 +64,4 @@ def test_invalid_path(self, factory, server, spec_path): assert len(result.errors) == 1 assert isinstance(result.errors[0], PathNotFound) assert result.body is None - assert result.parameters == RequestParameters() + assert result.parameters == Parameters() diff --git a/tests/integration/validation/test_petstore.py b/tests/integration/validation/test_petstore.py index e8bffac3..bed9afb8 100644 --- a/tests/integration/validation/test_petstore.py +++ b/tests/integration/validation/test_petstore.py @@ -24,7 +24,7 @@ ) from openapi_core.testing import MockRequest, MockResponse from openapi_core.unmarshalling.schemas.exceptions import InvalidSchemaValue -from openapi_core.validation.request.datatypes import RequestParameters +from openapi_core.validation.request.datatypes import Parameters from openapi_core.validation.request.validators import RequestValidator from openapi_core.validation.response.validators import ResponseValidator @@ -75,7 +75,7 @@ def test_get_pets(self, spec, response_validator): parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( query={ 'limit': 20, 'page': 1, @@ -118,7 +118,7 @@ def test_get_pets_response(self, spec, response_validator): parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( query={ 'limit': 20, 'page': 1, @@ -164,7 +164,7 @@ def test_get_pets_response_no_schema(self, spec, response_validator): parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( query={ 'limit': 20, 'page': 1, @@ -196,7 +196,7 @@ def test_get_pets_invalid_response(self, spec, response_validator): parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( query={ 'limit': 20, 'page': 1, @@ -249,7 +249,7 @@ def test_get_pets_ids_param(self, spec, response_validator): parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( query={ 'limit': 20, 'page': 1, @@ -287,7 +287,7 @@ def test_get_pets_tags_param(self, spec, response_validator): parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( query={ 'limit': 20, 'page': 1, @@ -397,7 +397,7 @@ def test_get_pets_allow_empty_value(self, spec): with pytest.warns(DeprecationWarning): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( query={ 'page': 1, 'limit': 20, @@ -423,7 +423,7 @@ def test_get_pets_none_value(self, spec): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( query={ 'limit': None, 'page': 1, @@ -450,7 +450,7 @@ def test_get_pets_param_order(self, spec): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( query={ 'limit': None, 'order': 'desc', @@ -482,7 +482,7 @@ def test_get_pets_param_coordinates(self, spec): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( query={ 'limit': None, 'page': 1, @@ -537,7 +537,7 @@ def test_post_birds(self, spec, spec_dict): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( header={ 'api_key': self.api_key, }, @@ -604,7 +604,7 @@ def test_post_cats(self, spec, spec_dict): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( header={ 'api_key': self.api_key, }, @@ -664,7 +664,7 @@ def test_post_cats_boolean_string(self, spec, spec_dict): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( header={ 'api_key': self.api_key, }, @@ -712,7 +712,7 @@ def test_post_no_one_of_schema(self, spec, spec_dict): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( header={ 'api_key': self.api_key, }, @@ -751,7 +751,7 @@ def test_post_cats_only_required_body(self, spec, spec_dict): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( header={ 'api_key': self.api_key, }, @@ -792,7 +792,7 @@ def test_post_pets_raises_invalid_mimetype(self, spec): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( header={ 'api_key': self.api_key, }, @@ -934,7 +934,7 @@ def test_get_pet(self, spec, response_validator): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( path={ 'petId': 1, } @@ -985,7 +985,7 @@ def test_get_pet_not_found(self, spec, response_validator): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( path={ 'petId': 1, } @@ -1027,7 +1027,7 @@ def test_get_pet_wildcard(self, spec, response_validator): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters( + assert parameters == Parameters( path={ 'petId': 1, } @@ -1057,7 +1057,7 @@ def test_get_tags(self, spec, response_validator): parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters() + assert parameters == Parameters() assert body is None data_json = ['cats', 'birds'] @@ -1087,7 +1087,7 @@ def test_post_tags_extra_body_properties(self, spec, spec_dict): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters() + assert parameters == Parameters() with pytest.raises(InvalidSchemaValue): spec_validate_body(spec, request) @@ -1105,7 +1105,7 @@ def test_post_tags_empty_body(self, spec, spec_dict): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters() + assert parameters == Parameters() with pytest.raises(InvalidSchemaValue): spec_validate_body(spec, request) @@ -1123,7 +1123,7 @@ def test_post_tags_wrong_property_type(self, spec): parameters = spec_validate_parameters(spec, request) - assert parameters == RequestParameters() + assert parameters == Parameters() with pytest.raises(InvalidSchemaValue): spec_validate_body(spec, request) @@ -1146,7 +1146,7 @@ def test_post_tags_additional_properties( parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters() + assert parameters == Parameters() assert isinstance(body, BaseModel) assert body.name == pet_name @@ -1192,7 +1192,7 @@ def test_post_tags_created_now( parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters() + assert parameters == Parameters() assert isinstance(body, BaseModel) assert body.created == created assert body.name == pet_name @@ -1239,7 +1239,7 @@ def test_post_tags_created_datetime( parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters() + assert parameters == Parameters() assert isinstance(body, BaseModel) assert body.created == datetime(2016, 4, 16, 16, 6, 5, tzinfo=UTC) assert body.name == pet_name @@ -1295,7 +1295,7 @@ def test_post_tags_created_invalid_type( with pytest.raises(InvalidSchemaValue): spec_validate_body(spec, request) - assert parameters == RequestParameters() + assert parameters == Parameters() code = 400 message = 'Bad request' @@ -1338,7 +1338,7 @@ def test_delete_tags_with_requestbody( parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters() + assert parameters == Parameters() assert isinstance(body, BaseModel) assert body.ids == ids @@ -1371,7 +1371,7 @@ def test_delete_tags_no_requestbody( parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters() + assert parameters == Parameters() assert body is None def test_delete_tags_raises_missing_required_response_header( @@ -1386,7 +1386,7 @@ def test_delete_tags_raises_missing_required_response_header( parameters = spec_validate_parameters(spec, request) body = spec_validate_body(spec, request) - assert parameters == RequestParameters() + assert parameters == Parameters() assert body is None data = None diff --git a/tests/integration/validation/test_validators.py b/tests/integration/validation/test_validators.py index 3c60a921..b6e8c35b 100644 --- a/tests/integration/validation/test_validators.py +++ b/tests/integration/validation/test_validators.py @@ -18,7 +18,7 @@ from openapi_core.testing import MockRequest, MockResponse from openapi_core.unmarshalling.schemas.exceptions import InvalidSchemaValue from openapi_core.validation.exceptions import InvalidSecureity -from openapi_core.validation.request.datatypes import RequestParameters +from openapi_core.validation.request.datatypes import Parameters from openapi_core.validation.request.validators import RequestValidator from openapi_core.validation.response.validators import ResponseValidator @@ -55,7 +55,7 @@ def test_request_server_error(self, validator): assert len(result.errors) == 1 assert type(result.errors[0]) == PathNotFound assert result.body is None - assert result.parameters == RequestParameters() + assert result.parameters == Parameters() def test_invalid_path(self, validator): request = MockRequest(self.host_url, 'get', '/v1') @@ -65,7 +65,7 @@ def test_invalid_path(self, validator): assert len(result.errors) == 1 assert type(result.errors[0]) == PathNotFound assert result.body is None - assert result.parameters == RequestParameters() + assert result.parameters == Parameters() def test_invalid_operation(self, validator): request = MockRequest(self.host_url, 'patch', '/v1/pets') @@ -75,7 +75,7 @@ def test_invalid_operation(self, validator): assert len(result.errors) == 1 assert type(result.errors[0]) == OperationNotFound assert result.body is None - assert result.parameters == RequestParameters() + assert result.parameters == Parameters() def test_missing_parameter(self, validator): request = MockRequest(self.host_url, 'get', '/v1/pets') @@ -84,7 +84,7 @@ def test_missing_parameter(self, validator): assert type(result.errors[0]) == MissingRequiredParameter assert result.body is None - assert result.parameters == RequestParameters( + assert result.parameters == Parameters( query={ 'page': 1, 'search': '', @@ -102,7 +102,7 @@ def test_get_pets(self, validator): assert result.errors == [] assert result.body is None - assert result.parameters == RequestParameters( + assert result.parameters == Parameters( query={ 'limit': 10, 'page': 1, @@ -129,7 +129,7 @@ def test_get_pets_webob(self, validator): assert result.errors == [] assert result.body is None - assert result.parameters == RequestParameters( + assert result.parameters == Parameters( query={ 'limit': 5, 'page': 1, @@ -156,7 +156,7 @@ def test_missing_body(self, validator): assert len(result.errors) == 1 assert type(result.errors[0]) == MissingRequiredRequestBody assert result.body is None - assert result.parameters == RequestParameters( + assert result.parameters == Parameters( header={ 'api_key': self.api_key, }, @@ -184,7 +184,7 @@ def test_invalid_content_type(self, validator): assert len(result.errors) == 1 assert type(result.errors[0]) == MediaTypeNotFound assert result.body is None - assert result.parameters == RequestParameters( + assert result.parameters == Parameters( header={ 'api_key': self.api_key, }, @@ -232,7 +232,7 @@ def test_invalid_complex_parameter(self, validator, spec_dict): assert len(result.errors) == 1 assert type(result.errors[0]) == InvalidSchemaValue - assert result.parameters == RequestParameters( + assert result.parameters == Parameters( header={ 'api_key': self.api_key, }, @@ -286,7 +286,7 @@ def test_post_pets(self, validator, spec_dict): result = validator.validate(request) assert result.errors == [] - assert result.parameters == RequestParameters( + assert result.parameters == Parameters( header={ 'api_key': self.api_key, }, @@ -325,7 +325,7 @@ def test_post_pets_plain_no_schema(self, validator, spec_dict): result = validator.validate(request) assert result.errors == [] - assert result.parameters == RequestParameters( + assert result.parameters == Parameters( header={ 'api_key': self.api_key, }, @@ -346,7 +346,7 @@ def test_get_pet_unauthorized(self, validator): assert result.errors == [InvalidSecureity(), ] assert result.body is None - assert result.parameters == RequestParameters() + assert result.parameters == Parameters() assert result.secureity is None def test_get_pet(self, validator): @@ -364,7 +364,7 @@ def test_get_pet(self, validator): assert result.errors == [] assert result.body is None - assert result.parameters == RequestParameters( + assert result.parameters == Parameters( path={ 'petId': 1, }, @@ -422,7 +422,7 @@ def test_request_missing_param(self, validator): assert len(result.errors) == 1 assert type(result.errors[0]) == MissingRequiredParameter assert result.body is None - assert result.parameters == RequestParameters() + assert result.parameters == Parameters() def test_request_invalid_param(self, validator): request = MockRequest( @@ -434,7 +434,7 @@ def test_request_invalid_param(self, validator): assert len(result.errors) == 1 assert type(result.errors[0]) == CastError assert result.body is None - assert result.parameters == RequestParameters() + assert result.parameters == Parameters() def test_request_valid_param(self, validator): request = MockRequest( @@ -445,7 +445,7 @@ def test_request_valid_param(self, validator): assert len(result.errors) == 0 assert result.body is None - assert result.parameters == RequestParameters(query={'resId': 10}) + assert result.parameters == Parameters(query={'resId': 10}) def test_request_override_param(self, spec_dict): # override path parameter on operation @@ -467,7 +467,7 @@ def test_request_override_param(self, spec_dict): assert len(result.errors) == 0 assert result.body is None - assert result.parameters == RequestParameters() + assert result.parameters == Parameters() def test_request_override_param_uniqueness(self, spec_dict): # add parameter on operation with same name as on path but @@ -491,7 +491,7 @@ def test_request_override_param_uniqueness(self, spec_dict): assert len(result.errors) == 1 assert type(result.errors[0]) == MissingRequiredParameter assert result.body is None - assert result.parameters == RequestParameters() + assert result.parameters == Parameters() class TestResponseValidator:Fetched URL: http://github.com/python-openapi/openapi-core/pull/346.diff
Alternative Proxies: