diff --git a/openapi_core/schema/media_types/models.py b/openapi_core/schema/media_types/models.py index 67858577..81ce96ca 100644 --- a/openapi_core/schema/media_types/models.py +++ b/openapi_core/schema/media_types/models.py @@ -32,14 +32,14 @@ def deserialize(self, value): return deserializer(value) def cast(self, value): - if not self.schema: - return value - try: deserialized = self.deserialize(value) except ValueError as exc: raise InvalidMediaTypeValue(exc) + if not self.schema: + return deserialized + try: return self.schema.cast(deserialized) except CastError as exc: diff --git a/openapi_core/schema/parameters/models.py b/openapi_core/schema/parameters/models.py index db5ccaac..3e0f74a4 100644 --- a/openapi_core/schema/parameters/models.py +++ b/openapi_core/schema/parameters/models.py @@ -99,14 +99,14 @@ def cast(self, value): not self.allow_empty_value): raise EmptyParameterValue(self.name) - if not self.schema: - return value - try: deserialized = self.deserialize(value) except (ValueError, AttributeError) as exc: raise InvalidParameterValue(self.name, exc) + if not self.schema: + return deserialized + try: return self.schema.cast(deserialized) except CastError as exc: diff --git a/tests/unit/schema/test_media_types.py b/tests/unit/schema/test_media_types.py index 77cbd351..f289300f 100644 --- a/tests/unit/schema/test_media_types.py +++ b/tests/unit/schema/test_media_types.py @@ -1,3 +1,6 @@ +import pytest + +from openapi_core.schema.media_types.exceptions import InvalidMediaTypeValue from openapi_core.schema.media_types.models import MediaType @@ -7,6 +10,13 @@ def test_empty(self): media_type = MediaType('application/json') value = '' + with pytest.raises(InvalidMediaTypeValue): + media_type.cast(value) + + def test_no_schema_deserialised(self): + media_type = MediaType('application/json') + value = "{}" + result = media_type.cast(value) - assert result == value + assert result == {}