Skip to content

Commit f4576c5

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

File tree

7 files changed

+73
-65
lines changed

7 files changed

+73
-65
lines changed

openapi_core/validation/request/datatypes.py

Lines changed: 9 additions & 1 deletion
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

Lines changed: 5 additions & 5 deletions
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, RequestParameters, 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

Lines changed: 3 additions & 3 deletions
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

Lines changed: 3 additions & 3 deletions
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

Lines changed: 3 additions & 3 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy