Skip to content

Commit 7a1270f

Browse files
committed
validation shortcuts remove validator factories
1 parent 6a44ff1 commit 7a1270f

File tree

9 files changed

+83
-301
lines changed

9 files changed

+83
-301
lines changed

openapi_core/__init__.py

+2-12
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
"""OpenAPI core module"""
2-
from openapi_core.shortcuts import spec_validate_body
3-
from openapi_core.shortcuts import spec_validate_data
4-
from openapi_core.shortcuts import spec_validate_headers
5-
from openapi_core.shortcuts import spec_validate_parameters
6-
from openapi_core.shortcuts import spec_validate_security
7-
from openapi_core.shortcuts import validate_request
8-
from openapi_core.shortcuts import validate_response
92
from openapi_core.spec import OpenAPIv30Spec
3+
from openapi_core.validation.request.shortcuts import validate_request
104
from openapi_core.validation.request.validators import RequestBodyValidator
115
from openapi_core.validation.request.validators import (
126
RequestParametersValidator,
137
)
148
from openapi_core.validation.request.validators import RequestSecurityValidator
159
from openapi_core.validation.request.validators import RequestValidator
10+
from openapi_core.validation.response.shortcuts import validate_response
1611
from openapi_core.validation.response.validators import ResponseDataValidator
1712
from openapi_core.validation.response.validators import (
1813
ResponseHeadersValidator,
@@ -31,11 +26,6 @@
3126
"OpenAPISpec",
3227
"validate_request",
3328
"validate_response",
34-
"spec_validate_body",
35-
"spec_validate_parameters",
36-
"spec_validate_security",
37-
"spec_validate_data",
38-
"spec_validate_headers",
3929
"RequestValidator",
4030
"ResponseValidator",
4131
"RequestBodyValidator",

openapi_core/shortcuts.py

-19
This file was deleted.

openapi_core/testing/factories.py

-11
This file was deleted.

openapi_core/util.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
"""OpenAPI core util module"""
2+
from typing import Any
23

34

4-
def forcebool(val):
5+
def forcebool(val: Any) -> bool:
56
if isinstance(val, str):
67
val = val.lower()
78
if val in ("y", "yes", "t", "true", "on", "1"):
+27-35
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
"""OpenAPI core validation request shortcuts module"""
2-
from functools import partial
3-
42
from openapi_core.validation.request.validators import RequestBodyValidator
53
from openapi_core.validation.request.validators import (
64
RequestParametersValidator,
@@ -15,42 +13,36 @@ def validate_request(validator, request):
1513
return result
1614

1715

18-
def spec_validate_request(
19-
spec,
20-
request,
21-
request_factory=None,
22-
validator_class=RequestValidator,
23-
result_attribute=None,
24-
):
25-
if request_factory is not None:
26-
request = request_factory(request)
16+
def spec_validate_request(spec, request, base_url=None):
17+
validator = RequestValidator(
18+
spec,
19+
base_url=base_url,
20+
)
21+
return validate_request(validator, request)
2722

28-
validator = validator_class(spec)
2923

30-
result = validator.validate(request)
31-
result.raise_for_errors()
24+
def spec_validate_body(spec, request, base_url=None):
25+
validator = RequestBodyValidator(
26+
spec,
27+
base_url=base_url,
28+
)
29+
result = validate_request(validator, request)
30+
return result.body
3231

33-
if result_attribute is None:
34-
return result
35-
return getattr(result, result_attribute)
3632

37-
38-
spec_validate_parameters = partial(
39-
spec_validate_request,
40-
validator_class=RequestParametersValidator,
41-
result_attribute="parameters",
42-
)
33+
def spec_validate_parameters(spec, request, base_url=None):
34+
validator = RequestParametersValidator(
35+
spec,
36+
base_url=base_url,
37+
)
38+
result = validate_request(validator, request)
39+
return result.parameters
4340

4441

45-
spec_validate_body = partial(
46-
spec_validate_request,
47-
validator_class=RequestBodyValidator,
48-
result_attribute="body",
49-
)
50-
51-
52-
spec_validate_security = partial(
53-
spec_validate_request,
54-
validator_class=RequestSecurityValidator,
55-
result_attribute="security",
56-
)
42+
def spec_validate_security(spec, request, base_url=None):
43+
validator = RequestSecurityValidator(
44+
spec,
45+
base_url=base_url,
46+
)
47+
result = validate_request(validator, request)
48+
return result.security
+26-38
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
"""OpenAPI core validation response shortcuts module"""
2-
from functools import partial
3-
42
from openapi_core.validation.response.validators import ResponseDataValidator
53
from openapi_core.validation.response.validators import (
64
ResponseHeadersValidator,
@@ -14,39 +12,29 @@ def validate_response(validator, request, response):
1412
return result
1513

1614

17-
def spec_validate_response(
18-
spec,
19-
request,
20-
response,
21-
request_factory=None,
22-
response_factory=None,
23-
validator_class=ResponseValidator,
24-
result_attribute=None,
25-
):
26-
if request_factory is not None:
27-
request = request_factory(request)
28-
if response_factory is not None:
29-
response = response_factory(response)
30-
31-
validator = validator_class(spec)
32-
33-
result = validator.validate(request, response)
34-
result.raise_for_errors()
35-
36-
if result_attribute is None:
37-
return result
38-
return getattr(result, result_attribute)
39-
40-
41-
spec_validate_data = partial(
42-
spec_validate_response,
43-
validator_class=ResponseDataValidator,
44-
result_attribute="data",
45-
)
46-
47-
48-
spec_validate_headers = partial(
49-
spec_validate_response,
50-
validator_class=ResponseHeadersValidator,
51-
result_attribute="headers",
52-
)
15+
def spec_validate_response(spec, request, response, base_url=None):
16+
validator = ResponseValidator(
17+
spec,
18+
base_url=base_url,
19+
custom_formatters=None,
20+
custom_media_type_deserializers=None,
21+
)
22+
return validate_response(validator, request, response)
23+
24+
25+
def spec_validate_data(spec, request, response, base_url=None):
26+
validator = ResponseDataValidator(
27+
spec,
28+
base_url=base_url,
29+
)
30+
result = validate_response(validator, request, response)
31+
return result.data
32+
33+
34+
def spec_validate_headers(spec, request, response, base_url=None):
35+
validator = ResponseHeadersValidator(
36+
spec,
37+
base_url=base_url,
38+
)
39+
result = validate_response(validator, request, response)
40+
return result.headers

tests/integration/validation/test_petstore.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,19 @@
1414
from openapi_core.exceptions import MissingRequiredHeader
1515
from openapi_core.exceptions import MissingRequiredParameter
1616
from openapi_core.extensions.models.models import BaseModel
17-
from openapi_core.shortcuts import spec_validate_body
18-
from openapi_core.shortcuts import spec_validate_data
19-
from openapi_core.shortcuts import spec_validate_headers
20-
from openapi_core.shortcuts import spec_validate_parameters
21-
from openapi_core.shortcuts import spec_validate_security
2217
from openapi_core.spec import OpenAPIv30Spec as Spec
2318
from openapi_core.templating.media_types.exceptions import MediaTypeNotFound
2419
from openapi_core.templating.paths.exceptions import ServerNotFound
2520
from openapi_core.testing import MockRequest
2621
from openapi_core.testing import MockResponse
2722
from openapi_core.unmarshalling.schemas.exceptions import InvalidSchemaValue
2823
from openapi_core.validation.request.datatypes import Parameters
24+
from openapi_core.validation.request.shortcuts import spec_validate_body
25+
from openapi_core.validation.request.shortcuts import spec_validate_parameters
26+
from openapi_core.validation.request.shortcuts import spec_validate_security
2927
from openapi_core.validation.request.validators import RequestValidator
28+
from openapi_core.validation.response.shortcuts import spec_validate_data
29+
from openapi_core.validation.response.shortcuts import spec_validate_headers
3030
from openapi_core.validation.response.validators import ResponseValidator
3131

3232

tests/unit/validation/test_request_shortcuts.py

+11-115
Original file line numberDiff line numberDiff line change
@@ -3,138 +3,34 @@
33
import pytest
44

55
from openapi_core.testing.datatypes import ResultMock
6-
from openapi_core.testing.factories import FactoryClassMock
7-
from openapi_core.validation.request.shortcuts import spec_validate_body
8-
from openapi_core.validation.request.shortcuts import spec_validate_parameters
6+
from openapi_core.validation.request.shortcuts import spec_validate_request
97

108

11-
class TestSpecValidateParameters:
9+
class TestValidateRequest:
1210
@mock.patch(
13-
"openapi_core.validation.request.shortcuts.RequestParametersValidator."
14-
"validate"
11+
"openapi_core.validation.request.shortcuts.RequestValidator.validate"
1512
)
16-
def test_no_request_factory(self, mock_validate):
13+
def test_validator_valid(self, mock_validate):
1714
spec = mock.sentinel.spec
1815
request = mock.sentinel.request
1916
parameters = mock.sentinel.parameters
20-
mock_validate.return_value = ResultMock(parameters=parameters)
17+
validation_result = ResultMock(parameters=parameters)
18+
mock_validate.return_value = validation_result
2119

22-
result = spec_validate_parameters(spec, request)
20+
result = spec_validate_request(spec, request)
2321

24-
assert result == parameters
22+
assert result == validation_result
2523
mock_validate.aasert_called_once_with(request)
2624

2725
@mock.patch(
28-
"openapi_core.validation.request.shortcuts.RequestParametersValidator."
29-
"validate"
26+
"openapi_core.validation.request.shortcuts.RequestValidator.validate"
3027
)
31-
def test_no_request_factory_error(self, mock_validate):
28+
def test_validator_error(self, mock_validate):
3229
spec = mock.sentinel.spec
3330
request = mock.sentinel.request
3431
mock_validate.return_value = ResultMock(error_to_raise=ValueError)
3532

3633
with pytest.raises(ValueError):
37-
spec_validate_parameters(spec, request)
34+
spec_validate_request(spec, request)
3835

3936
mock_validate.aasert_called_once_with(request)
40-
41-
@mock.patch(
42-
"openapi_core.validation.request.shortcuts.RequestParametersValidator."
43-
"validate"
44-
)
45-
def test_request_factory(self, mock_validate):
46-
spec = mock.sentinel.spec
47-
request = mock.sentinel.request
48-
parameters = mock.sentinel.parameters
49-
mock_validate.return_value = ResultMock(parameters=parameters)
50-
request_factory = FactoryClassMock
51-
52-
result = spec_validate_parameters(spec, request, request_factory)
53-
54-
assert result == parameters
55-
mock_validate.assert_called_once_with(
56-
FactoryClassMock(request),
57-
)
58-
59-
@mock.patch(
60-
"openapi_core.validation.request.shortcuts.RequestParametersValidator."
61-
"validate"
62-
)
63-
def test_request_factory_error(self, mock_validate):
64-
spec = mock.sentinel.spec
65-
request = mock.sentinel.request
66-
mock_validate.return_value = ResultMock(error_to_raise=ValueError)
67-
request_factory = FactoryClassMock
68-
69-
with pytest.raises(ValueError):
70-
spec_validate_parameters(spec, request, request_factory)
71-
72-
mock_validate.assert_called_once_with(
73-
FactoryClassMock(request),
74-
)
75-
76-
77-
class TestSpecValidateBody:
78-
@mock.patch(
79-
"openapi_core.validation.request.shortcuts.RequestBodyValidator."
80-
"validate"
81-
)
82-
def test_no_request_factory(self, mock_validate):
83-
spec = mock.sentinel.spec
84-
request = mock.sentinel.request
85-
body = mock.sentinel.body
86-
mock_validate.return_value = ResultMock(body=body)
87-
88-
result = spec_validate_body(spec, request)
89-
90-
assert result == body
91-
mock_validate.aasert_called_once_with(request)
92-
93-
@mock.patch(
94-
"openapi_core.validation.request.shortcuts.RequestBodyValidator."
95-
"validate"
96-
)
97-
def test_no_request_factory_error(self, mock_validate):
98-
spec = mock.sentinel.spec
99-
request = mock.sentinel.request
100-
mock_validate.return_value = ResultMock(error_to_raise=ValueError)
101-
102-
with pytest.raises(ValueError):
103-
spec_validate_body(spec, request)
104-
105-
mock_validate.aasert_called_once_with(request)
106-
107-
@mock.patch(
108-
"openapi_core.validation.request.shortcuts.RequestBodyValidator."
109-
"validate"
110-
)
111-
def test_request_factory(self, mock_validate):
112-
spec = mock.sentinel.spec
113-
request = mock.sentinel.request
114-
body = mock.sentinel.body
115-
mock_validate.return_value = ResultMock(body=body)
116-
request_factory = FactoryClassMock
117-
118-
result = spec_validate_body(spec, request, request_factory)
119-
120-
assert result == body
121-
mock_validate.assert_called_once_with(
122-
FactoryClassMock(request),
123-
)
124-
125-
@mock.patch(
126-
"openapi_core.validation.request.shortcuts.RequestBodyValidator."
127-
"validate"
128-
)
129-
def test_request_factory_error(self, mock_validate):
130-
spec = mock.sentinel.spec
131-
request = mock.sentinel.request
132-
mock_validate.return_value = ResultMock(error_to_raise=ValueError)
133-
request_factory = FactoryClassMock
134-
135-
with pytest.raises(ValueError):
136-
spec_validate_body(spec, request, request_factory)
137-
138-
mock_validate.assert_called_once_with(
139-
FactoryClassMock(request),
140-
)

0 commit comments

Comments
 (0)