Skip to content

Commit 80889c6

Browse files
committed
Request validation parameters dataclass
1 parent 4a7f88b commit 80889c6

File tree

7 files changed

+73
-65
lines changed

7 files changed

+73
-65
lines changed

openapi_core/validation/request/datatypes.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,16 @@ class OpenAPIRequest:
6060
parameters: RequestParameters = field(default_factory=RequestParameters)
6161

6262

63+
@dataclass
64+
class Parameters:
65+
query: Dict = field(default_factory=dict)
66+
header: Dict = field(default_factory=dict)
67+
cookie: Dict = field(default_factory=dict)
68+
path: Dict = field(default_factory=dict)
69+
70+
6371
@dataclass
6472
class RequestValidationResult(BaseValidationResult):
6573
body: Optional[str] = None
66-
parameters: RequestParameters = field(default_factory=RequestParameters)
74+
parameters: Parameters = field(default_factory=Parameters)
6775
security: Optional[Dict[str, str]] = None

openapi_core/validation/request/validators.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
)
2222
from openapi_core.validation.exceptions import InvalidSecurity
2323
from openapi_core.validation.request.datatypes import (
24-
RequestParameters, RequestValidationResult,
24+
Parameters, RequestValidationResult,
2525
)
2626
from openapi_core.validation.validators import BaseValidator
2727

@@ -47,7 +47,7 @@ def _get_parameters(self, request, path, operation):
4747

4848
errors = []
4949
seen = set()
50-
locations = {}
50+
parameters = Parameters()
5151
params_iter = iter_params(operation_params, path_params)
5252
for param in params_iter:
5353
param_name = param['name']
@@ -68,10 +68,10 @@ def _get_parameters(self, request, path, operation):
6868
errors.append(exc)
6969
continue
7070
else:
71-
locations.setdefault(param_location, {})
72-
locations[param_location][param_name] = value
71+
location = getattr(parameters, param_location)
72+
location[param_name] = value
7373

74-
return RequestParameters(**locations), errors
74+
return parameters, errors
7575

7676
def _get_parameter(self, param, request):
7777
name = param['name']

tests/integration/contrib/falcon/test_falcon_middlewares.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from openapi_core.contrib.falcon.middlewares import FalconOpenAPIMiddleware
88
from openapi_core.shortcuts import create_spec
9-
from openapi_core.validation.request.datatypes import RequestParameters
9+
from openapi_core.validation.request.datatypes import Parameters
1010

1111

1212
class TestFalconOpenAPIMiddleware:
@@ -62,7 +62,7 @@ def view_response_callable(request, response, id):
6262
from falcon.status_codes import HTTP_200
6363
assert request.openapi
6464
assert not request.openapi.errors
65-
assert request.openapi.parameters == RequestParameters(path={
65+
assert request.openapi.parameters == Parameters(path={
6666
'id': 12,
6767
})
6868
response.content_type = MEDIA_HTML
@@ -186,7 +186,7 @@ def view_response_callable(request, response, id):
186186
from falcon.status_codes import HTTP_200
187187
assert request.openapi
188188
assert not request.openapi.errors
189-
assert request.openapi.parameters == RequestParameters(path={
189+
assert request.openapi.parameters == Parameters(path={
190190
'id': 12,
191191
})
192192
response.status = HTTP_200

tests/integration/contrib/flask/test_flask_decorator.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from openapi_core.contrib.flask.decorators import FlaskOpenAPIViewDecorator
55
from openapi_core.shortcuts import create_spec
6-
from openapi_core.validation.request.datatypes import RequestParameters
6+
from openapi_core.validation.request.datatypes import Parameters
77

88

99
class TestFlaskOpenAPIDecorator:
@@ -59,7 +59,7 @@ def view_response_callable(*args, **kwargs):
5959
from flask.globals import request
6060
assert request.openapi
6161
assert not request.openapi.errors
62-
assert request.openapi.parameters == RequestParameters(path={
62+
assert request.openapi.parameters == Parameters(path={
6363
'id': 12,
6464
})
6565
resp = make_response('success', 200)
@@ -171,7 +171,7 @@ def view_response_callable(*args, **kwargs):
171171
from flask.globals import request
172172
assert request.openapi
173173
assert not request.openapi.errors
174-
assert request.openapi.parameters == RequestParameters(path={
174+
assert request.openapi.parameters == Parameters(path={
175175
'id': 12,
176176
})
177177
resp = jsonify(data='data')

tests/integration/validation/test_minimal.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
PathNotFound, OperationNotFound,
66
)
77
from openapi_core.testing import MockRequest
8-
from openapi_core.validation.request.datatypes import RequestParameters
8+
from openapi_core.validation.request.datatypes import Parameters
99
from openapi_core.validation.request.validators import RequestValidator
1010

1111

@@ -49,7 +49,7 @@ def test_invalid_operation(self, factory, server, spec_path):
4949
assert len(result.errors) == 1
5050
assert isinstance(result.errors[0], OperationNotFound)
5151
assert result.body is None
52-
assert result.parameters == RequestParameters()
52+
assert result.parameters == Parameters()
5353

5454
@pytest.mark.parametrize("server", servers)
5555
@pytest.mark.parametrize("spec_path", spec_paths)
@@ -64,4 +64,4 @@ def test_invalid_path(self, factory, server, spec_path):
6464
assert len(result.errors) == 1
6565
assert isinstance(result.errors[0], PathNotFound)
6666
assert result.body is None
67-
assert result.parameters == RequestParameters()
67+
assert result.parameters == Parameters()

0 commit comments

Comments
 (0)