@@ -711,3 +711,62 @@ def test_custom_serializer() -> None:
711
711
print (s )
712
712
assert s .to_python ([{'id' : 1 }, {'id' : 2 }]) == [1 , 2 ]
713
713
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