Skip to content

Commit b75798a

Browse files
committed
Handle parameter deserialization errors
1 parent 06e8007 commit b75798a

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

openapi_core/schema/parameters/models.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,10 @@ def unmarshal(self, value):
108108
if not self.schema:
109109
return value
110110

111-
deserialized = self.deserialize(value)
111+
try:
112+
deserialized = self.deserialize(value)
113+
except (ValueError, AttributeError) as exc:
114+
raise InvalidParameterValue(str(exc))
112115

113116
try:
114117
return self.schema.unmarshal(deserialized)

tests/integration/test_petstore.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,26 @@ def test_get_pets_tags_param(self, spec, response_validator):
297297
assert response_result.errors == []
298298
assert response_result.data == data_json
299299

300+
def test_get_pets_parameter_deserialization_error(self, spec):
301+
host_url = 'http://petstore.swagger.io/v1'
302+
path_pattern = '/v1/pets'
303+
query_params = {
304+
'limit': 1,
305+
'tags': 12,
306+
}
307+
308+
request = MockRequest(
309+
host_url, 'GET', '/pets',
310+
path_pattern=path_pattern, args=query_params,
311+
)
312+
313+
with pytest.raises(InvalidParameterValue):
314+
request.get_parameters(spec)
315+
316+
body = request.get_body(spec)
317+
318+
assert body is None
319+
300320
def test_get_pets_wrong_parameter_type(self, spec):
301321
host_url = 'http://petstore.swagger.io/v1'
302322
path_pattern = '/v1/pets'

0 commit comments

Comments
 (0)