Skip to content

Commit 23a8b57

Browse files
authored
Merge pull request #334 from p1c2u/refactor/validators-refactor
Validators refactor
2 parents 097aba9 + a26da32 commit 23a8b57

File tree

10 files changed

+414
-348
lines changed

10 files changed

+414
-348
lines changed

openapi_core/__init__.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
11
# -*- coding: utf-8 -*-
22
"""OpenAPI core module"""
33
from openapi_core.shortcuts import (
4-
create_spec, validate_parameters, validate_body, validate_data,
4+
create_spec, validate_request, validate_response,
5+
spec_validate_body, spec_validate_parameters, spec_validate_security,
6+
spec_validate_data, spec_validate_headers,
7+
)
8+
from openapi_core.validation.request.validators import (
9+
RequestValidator,
10+
RequestBodyValidator,
11+
RequestParametersValidator,
12+
RequestSecurityValidator,
13+
)
14+
from openapi_core.validation.response.validators import (
15+
ResponseValidator,
16+
ResponseDataValidator,
17+
ResponseHeadersValidator,
518
)
619

720
__author__ = 'Artur Maciag'
@@ -11,5 +24,10 @@
1124
__license__ = 'BSD 3-Clause License'
1225

1326
__all__ = [
14-
'create_spec', 'validate_parameters', 'validate_body', 'validate_data',
27+
'create_spec', 'validate_request', 'validate_response',
28+
'spec_validate_body', 'spec_validate_parameters', 'spec_validate_security',
29+
'spec_validate_data', 'spec_validate_headers',
30+
'RequestValidator', 'ResponseValidator', 'RequestBodyValidator',
31+
'RequestParametersValidator', 'RequestSecurityValidator',
32+
'ResponseDataValidator', 'ResponseHeadersValidator',
1533
]

openapi_core/schema/parameters.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from __future__ import division
2+
from itertools import chain
23

34

45
def get_aslist(param_or_header):
@@ -52,3 +53,8 @@ def get_value(param_or_header, location, name=None):
5253
return location.getlist(name)
5354

5455
return location[name]
56+
57+
58+
def iter_params(*lists):
59+
iters = map(lambda l: l and iter(l) or [], lists)
60+
return chain(*iters)

openapi_core/shortcuts.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@
22
# backward compatibility
33
from openapi_core.spec.shortcuts import create_spec
44
from openapi_core.validation.request.shortcuts import (
5-
spec_validate_body as validate_body,
6-
spec_validate_parameters as validate_parameters,
5+
validate_request,
6+
spec_validate_body, spec_validate_parameters, spec_validate_security,
77
)
8-
from openapi_core.validation.request.validators import RequestValidator
98
from openapi_core.validation.response.shortcuts import (
10-
spec_validate_data as validate_data
9+
validate_response,
10+
spec_validate_data, spec_validate_headers,
1111
)
12-
from openapi_core.validation.response.validators import ResponseValidator
1312

1413
__all__ = [
15-
'create_spec', 'validate_body', 'validate_parameters', 'validate_data',
16-
'RequestValidator', 'ResponseValidator',
14+
'create_spec',
15+
'validate_request', 'validate_response',
16+
'spec_validate_body', 'spec_validate_parameters', 'spec_validate_security',
17+
'spec_validate_data', 'spec_validate_headers',
1718
]
Lines changed: 29 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,47 @@
11
"""OpenAPI core validation request shortcuts module"""
2-
import warnings
2+
from functools import partial
33

4-
from openapi_core.validation.request.validators import RequestValidator
4+
from openapi_core.validation.request.validators import (
5+
RequestValidator,
6+
RequestBodyValidator,
7+
RequestParametersValidator,
8+
RequestSecurityValidator,
9+
)
510

611

7-
def validate_request(validator, request, failsafe=None):
8-
if failsafe is None:
9-
failsafe = ()
12+
def validate_request(validator, request):
1013
result = validator.validate(request)
11-
try:
12-
result.raise_for_errors()
13-
except failsafe:
14-
pass
14+
result.raise_for_errors()
1515
return result
1616

1717

18-
def validate_parameters(validator, request):
19-
warnings.warn(
20-
"validate_parameters shortcut is deprecated, "
21-
"use validator.validate instead",
22-
DeprecationWarning,
23-
)
24-
result = validator._validate_parameters(request)
25-
result.raise_for_errors()
26-
return result
18+
def spec_validate_request(
19+
spec, request, request_factory=None, validator_class=RequestValidator,
20+
result_attribute=None,
21+
):
22+
if request_factory is not None:
23+
request = request_factory(request)
2724

25+
validator = validator_class(spec)
2826

29-
def validate_body(validator, request):
30-
warnings.warn(
31-
"validate_body shortcut is deprecated, "
32-
"use validator.validate instead",
33-
DeprecationWarning,
34-
)
35-
result = validator._validate_body(request)
27+
result = validator.validate(request)
3628
result.raise_for_errors()
37-
return result
38-
3929

40-
def spec_validate_parameters(spec, request, request_factory=None):
41-
if request_factory is not None:
42-
request = request_factory(request)
30+
if result_attribute is None:
31+
return result
32+
return getattr(result, result_attribute)
4333

44-
validator = RequestValidator(spec)
45-
result = validate_parameters(validator, request)
4634

47-
return result.parameters
35+
spec_validate_parameters = partial(
36+
spec_validate_request,
37+
validator_class=RequestParametersValidator, result_attribute='parameters')
4838

4939

50-
def spec_validate_body(spec, request, request_factory=None):
51-
if request_factory is not None:
52-
request = request_factory(request)
40+
spec_validate_body = partial(
41+
spec_validate_request,
42+
validator_class=RequestBodyValidator, result_attribute='body')
5343

54-
validator = RequestValidator(spec)
55-
result = validate_body(validator, request)
5644

57-
return result.body
45+
spec_validate_security = partial(
46+
spec_validate_request,
47+
validator_class=RequestSecurityValidator, result_attribute='security')

0 commit comments

Comments
 (0)