From eb9a04b45ea1fedf1ac94e03fa148ab9cdf3671a Mon Sep 17 00:00:00 2001 From: Frazer McLean Date: Fri, 9 Aug 2024 17:48:51 +0200 Subject: [PATCH] Fix valid_data being a list when many=False --- src/marshmallow_oneofschema/one_of_schema.py | 5 ++--- tests/test_one_of_schema.py | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/marshmallow_oneofschema/one_of_schema.py b/src/marshmallow_oneofschema/one_of_schema.py index a6e3f96..dc4c660 100644 --- a/src/marshmallow_oneofschema/one_of_schema.py +++ b/src/marshmallow_oneofschema/one_of_schema.py @@ -129,13 +129,12 @@ def load(self, data, *, many=None, partial=None, unknown=None, **kwargs): partial = self.partial if not many: try: - result = result_data = self._load( + result_data = self._load( data, partial=partial, unknown=unknown, **kwargs ) - # result_data.append(result) except ValidationError as error: result_errors = error.normalized_messages() - result_data.append(error.valid_data) + result_data = error.valid_data else: for idx, item in enumerate(data): try: diff --git a/tests/test_one_of_schema.py b/tests/test_one_of_schema.py index e8d0528..366e014 100644 --- a/tests/test_one_of_schema.py +++ b/tests/test_one_of_schema.py @@ -234,6 +234,24 @@ def test_load_many_errors_strict(self): 3: {"value": ["Not a valid integer."]}, } == exc_info.value.messages + def test_load_error_valid_data(self): + with pytest.raises(m.ValidationError) as exc_info: + MySchema().load({"type": "Foo", "value": 123}) + + assert exc_info.value.valid_data == {} + + def test_load_error_valid_data_many(self): + with pytest.raises(m.ValidationError) as exc_info: + MySchema().load( + [ + {"type": "Foo", "value": 123}, + {"type": "Foo", "value": "hello"}, + ], + many=True, + ) + + assert exc_info.value.valid_data == [{}, Foo("hello")] + def test_load_partial_specific(self): result = MySchema().load({"type": "Foo"}, partial=("value", "value2")) assert Foo() == result