Skip to content

Commit d3fd01f

Browse files
committed
add support for all lookup keys for aliases
1 parent 4ef09c0 commit d3fd01f

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

tests/serializers/test_union.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,3 +711,62 @@ def test_custom_serializer() -> None:
711711
print(s)
712712
assert s.to_python([{'id': 1}, {'id': 2}]) == [1, 2]
713713
assert s.to_python({'id': 1}) == 1
714+
715+
716+
def test_tagged_union_with_aliases() -> None:
717+
@dataclasses.dataclass
718+
class ModelA:
719+
field: int
720+
tag: Literal['a'] = 'a'
721+
722+
@dataclasses.dataclass
723+
class ModelB:
724+
field: int
725+
tag: Literal['b'] = 'b'
726+
727+
s = SchemaSerializer(
728+
core_schema.tagged_union_schema(
729+
choices={
730+
'a': core_schema.dataclass_schema(
731+
ModelA,
732+
core_schema.dataclass_args_schema(
733+
'ModelA',
734+
[
735+
core_schema.dataclass_field(name='field', schema=core_schema.int_schema()),
736+
core_schema.dataclass_field(
737+
name='tag',
738+
schema=core_schema.literal_schema(['a']),
739+
validation_alias='TAG',
740+
serialization_alias='TAG',
741+
),
742+
],
743+
),
744+
['field', 'tag'],
745+
),
746+
'b': core_schema.dataclass_schema(
747+
ModelB,
748+
core_schema.dataclass_args_schema(
749+
'ModelB',
750+
[
751+
core_schema.dataclass_field(name='field', schema=core_schema.int_schema()),
752+
core_schema.dataclass_field(
753+
name='tag',
754+
schema=core_schema.literal_schema(['b']),
755+
validation_alias='TAG',
756+
serialization_alias='TAG',
757+
),
758+
],
759+
),
760+
['field', 'tag'],
761+
),
762+
},
763+
discriminator=[['tag'], ['TAG']],
764+
)
765+
)
766+
767+
assert 'TaggedUnionSerializer' in repr(s)
768+
769+
model_a = ModelA(field=1)
770+
model_b = ModelB(field=1)
771+
assert s.to_python(model_a) == {'field': 1, 'TAG': 'a'}
772+
assert s.to_python(model_b) == {'field': 1, 'TAG': 'b'}

0 commit comments

Comments
 (0)