Skip to content

Commit a40c6fe

Browse files
author
Zahari Kassabov
committed
Fix MRO indexing issue
The indexing only worked correctly for one base dataclass.
1 parent c57b1e5 commit a40c6fe

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

validobj/tests/test_delayed_dataclasses.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ class Linked:
1111
parents: Linked | list[Linked] | None = None
1212

1313
@dataclasses.dataclass
14-
class Parent:
14+
class Grandparent:
15+
grandpa_field: int = 3
16+
17+
@dataclasses.dataclass
18+
class Parent(Grandparent):
1519
parent_field: int = 1
1620
override_field: str = 'parent'
1721

@@ -26,11 +30,12 @@ def test_delayed_annotations():
2630
assert parse_input(inp, Linked).parents.value == 2
2731

2832
def test_derived_dataclasses():
29-
inp = {'child_field': 3, 'parent_field': 4, 'override_field': 5}
33+
inp = {'child_field': 3, 'parent_field': 4, 'override_field': 5, 'grandpa_field': 10}
3034
res = parse_input(inp, Child)
3135
assert res.child_field == 3
3236
assert res.parent_field == 4
3337
assert res.override_field == 5
38+
assert res.grandpa_field == 10
3439

3540
with pytest.raises(ValidationError):
3641
parse_input({'override_field': 'x'}, Child)

validobj/validation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ def _dataclass_types(cls):
190190
res = {}
191191

192192
# Base classes, including current one, from parent to child, excluding object
193-
for base in cls.__mro__[1::-1]:
193+
for base in cls.__mro__[-2::-1]:
194194
if dataclasses.is_dataclass(base):
195195
res.update(base.__annotations__)
196196

0 commit comments

Comments
 (0)