Skip to content

Commit fa6c289

Browse files
authored
Proposed fix for lovasoa#161 (lovasoa#162)
* Fix for lovasoa#161 * Update CHANGELOG.md * v8.5.3
1 parent 7452ec2 commit fa6c289

File tree

5 files changed

+25
-38
lines changed

5 files changed

+25
-38
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# marshmallow\_dataclass change log
22

3+
## v8.5.3
4+
5+
- Fix spurious `ValueError` when defining a Union field with explicit default value
6+
([#161](https://github.com/lovasoa/marshmallow_dataclass/pull/161))
7+
38
## v8.5.2
49

510
- Fix spurious `TypeError` when serializing `Optional` union types with `required=True`

marshmallow_dataclass/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ def _field_for_generic_type(
506506
(
507507
subtyp,
508508
field_for_schema(
509-
subtyp, metadata=metadata, base_schema=base_schema
509+
subtyp, metadata={"required": True}, base_schema=base_schema
510510
),
511511
)
512512
for subtyp in subtypes

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from setuptools import setup, find_packages
22

3-
VERSION = "8.5.2"
3+
VERSION = "8.5.3"
44

55
CLASSIFIERS = [
66
"Development Status :: 4 - Beta",

tests/test_field_for_schema.py

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -139,24 +139,8 @@ def test_union_multiple_types_with_none(self):
139139
field_for_schema(Union[int, str, None]),
140140
union_field.Union(
141141
[
142-
(
143-
int,
144-
fields.Integer(
145-
allow_none=True,
146-
required=False,
147-
dump_default=None,
148-
load_default=None,
149-
),
150-
),
151-
(
152-
str,
153-
fields.String(
154-
allow_none=True,
155-
required=False,
156-
dump_default=None,
157-
load_default=None,
158-
),
159-
),
142+
(int, fields.Integer(required=True)),
143+
(str, fields.String(required=True)),
160144
],
161145
required=False,
162146
dump_default=None,
@@ -169,24 +153,8 @@ def test_optional_multiple_types(self):
169153
field_for_schema(Optional[Union[int, str]]),
170154
union_field.Union(
171155
[
172-
(
173-
int,
174-
fields.Integer(
175-
allow_none=True,
176-
required=False,
177-
dump_default=None,
178-
load_default=None,
179-
),
180-
),
181-
(
182-
str,
183-
fields.String(
184-
allow_none=True,
185-
required=False,
186-
dump_default=None,
187-
load_default=None,
188-
),
189-
),
156+
(int, fields.Integer(required=True)),
157+
(str, fields.String(required=True)),
190158
],
191159
required=False,
192160
dump_default=None,

tests/test_union.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,3 +166,17 @@ class Dclass:
166166
for value in None, 42, "strvar":
167167
self.assertEqual(schema.dump(Dclass(value=value)), {"value": value})
168168
self.assertEqual(schema.load({"value": value}), Dclass(value=value))
169+
170+
def test_union_with_default(self):
171+
@dataclass
172+
class IntOrStrWithDefault:
173+
value: Union[int, str] = 42
174+
175+
schema = IntOrStrWithDefault.Schema()
176+
self.assertEqual(schema.load({}), IntOrStrWithDefault(value=42))
177+
for value in 13, "strval":
178+
self.assertEqual(
179+
schema.load({"value": value}), IntOrStrWithDefault(value=value)
180+
)
181+
with self.assertRaises(marshmallow.exceptions.ValidationError):
182+
schema.load({"value": None})

0 commit comments

Comments
 (0)