@@ -584,7 +584,7 @@ def _internal_class_schema(
584
584
if field .init or include_non_init
585
585
)
586
586
587
- schema_class = type (clazz . __name__ , (_base_schema (clazz , base_schema ),), attributes )
587
+ schema_class = type (_name , (_base_schema (clazz , base_schema ),), attributes )
588
588
return cast (Type [marshmallow .Schema ], schema_class )
589
589
590
590
@@ -602,6 +602,7 @@ def _field_by_supertype(
602
602
newtype_supertype : Type ,
603
603
metadata : dict ,
604
604
base_schema : Optional [Type [marshmallow .Schema ]],
605
+ generic_params_to_args : Optional [Tuple [Tuple [type , type ], ...]] = None ,
605
606
) -> marshmallow .fields .Field :
606
607
"""
607
608
Return a new field for fields based on a super field. (Usually spawned from NewType)
@@ -632,6 +633,7 @@ def _field_by_supertype(
632
633
metadata = metadata ,
633
634
default = default ,
634
635
base_schema = base_schema ,
636
+ generic_params_to_args = generic_params_to_args ,
635
637
)
636
638
637
639
@@ -655,6 +657,7 @@ def _generic_type_add_any(typ: type) -> type:
655
657
def _field_for_generic_type (
656
658
typ : type ,
657
659
base_schema : Optional [Type [marshmallow .Schema ]],
660
+ generic_params_to_args : Optional [Tuple [Tuple [type , type ], ...]] = None ,
658
661
** metadata : Any ,
659
662
) -> Optional [marshmallow .fields .Field ]:
660
663
"""
@@ -667,7 +670,11 @@ def _field_for_generic_type(
667
670
type_mapping = base_schema .TYPE_MAPPING if base_schema else {}
668
671
669
672
if origin in (list , List ):
670
- child_type = _field_for_schema (arguments [0 ], base_schema = base_schema )
673
+ child_type = field_for_schema (
674
+ arguments [0 ],
675
+ base_schema = base_schema ,
676
+ generic_params_to_args = generic_params_to_args ,
677
+ )
671
678
list_type = cast (
672
679
Type [marshmallow .fields .List ],
673
680
type_mapping .get (List , marshmallow .fields .List ),
@@ -680,25 +687,42 @@ def _field_for_generic_type(
680
687
):
681
688
from . import collection_field
682
689
683
- child_type = _field_for_schema (arguments [0 ], base_schema = base_schema )
690
+ child_type = field_for_schema (
691
+ arguments [0 ],
692
+ base_schema = base_schema ,
693
+ generic_params_to_args = generic_params_to_args ,
694
+ )
684
695
return collection_field .Sequence (cls_or_instance = child_type , ** metadata )
685
696
if origin in (set , Set ):
686
697
from . import collection_field
687
698
688
- child_type = _field_for_schema (arguments [0 ], base_schema = base_schema )
699
+ child_type = field_for_schema (
700
+ arguments [0 ],
701
+ base_schema = base_schema ,
702
+ generic_params_to_args = generic_params_to_args ,
703
+ )
689
704
return collection_field .Set (
690
705
cls_or_instance = child_type , frozen = False , ** metadata
691
706
)
692
707
if origin in (frozenset , FrozenSet ):
693
708
from . import collection_field
694
709
695
- child_type = _field_for_schema (arguments [0 ], base_schema = base_schema )
710
+ child_type = field_for_schema (
711
+ arguments [0 ],
712
+ base_schema = base_schema ,
713
+ generic_params_to_args = generic_params_to_args ,
714
+ )
696
715
return collection_field .Set (
697
716
cls_or_instance = child_type , frozen = True , ** metadata
698
717
)
699
718
if origin in (tuple , Tuple ):
700
719
children = tuple (
701
- _field_for_schema (arg , base_schema = base_schema ) for arg in arguments
720
+ field_for_schema (
721
+ arg ,
722
+ base_schema = base_schema ,
723
+ generic_params_to_args = generic_params_to_args ,
724
+ )
725
+ for arg in arguments
702
726
)
703
727
tuple_type = cast (
704
728
Type [marshmallow .fields .Tuple ],
@@ -710,8 +734,16 @@ def _field_for_generic_type(
710
734
if origin in (dict , Dict , collections .abc .Mapping , Mapping ):
711
735
dict_type = type_mapping .get (Dict , marshmallow .fields .Dict )
712
736
return dict_type (
713
- keys = _field_for_schema (arguments [0 ], base_schema = base_schema ),
714
- values = _field_for_schema (arguments [1 ], base_schema = base_schema ),
737
+ keys = field_for_schema (
738
+ arguments [0 ],
739
+ base_schema = base_schema ,
740
+ generic_params_to_args = generic_params_to_args ,
741
+ ),
742
+ values = field_for_schema (
743
+ arguments [1 ],
744
+ base_schema = base_schema ,
745
+ generic_params_to_args = generic_params_to_args ,
746
+ ),
715
747
** metadata ,
716
748
)
717
749
@@ -768,6 +800,7 @@ def _field_for_union_type(
768
800
subtypes [0 ],
769
801
metadata = metadata ,
770
802
base_schema = base_schema ,
803
+ generic_params_to_args = generic_params_to_args ,
771
804
)
772
805
from . import union_field
773
806
@@ -779,6 +812,7 @@ def _field_for_union_type(
779
812
subtyp ,
780
813
metadata = {"required" : True },
781
814
base_schema = base_schema ,
815
+ generic_params_to_args = generic_params_to_args ,
782
816
),
783
817
)
784
818
for subtyp in subtypes
@@ -818,14 +852,17 @@ def field_for_schema(
818
852
<class 'marshmallow.fields.Url'>
819
853
"""
820
854
with _SchemaContext (localns = typ_frame .f_locals if typ_frame is not None else None ):
821
- return _field_for_schema (typ , default , metadata , base_schema )
855
+ return _field_for_schema (
856
+ typ , default , metadata , base_schema , generic_params_to_args
857
+ )
822
858
823
859
824
860
def _field_for_schema (
825
861
typ : type ,
826
862
default : Any = marshmallow .missing ,
827
863
metadata : Optional [Mapping [str , Any ]] = None ,
828
864
base_schema : Optional [Type [marshmallow .Schema ]] = None ,
865
+ generic_params_to_args : Optional [Tuple [Tuple [type , type ], ...]] = None ,
829
866
) -> marshmallow .fields .Field :
830
867
"""
831
868
Get a marshmallow Field corresponding to the given python type.
@@ -913,7 +950,9 @@ def _field_for_schema(
913
950
)
914
951
else :
915
952
subtyp = Any
916
- return _field_for_schema (subtyp , default , metadata , base_schema )
953
+ return field_for_schema (
954
+ subtyp , default , metadata , base_schema , generic_params_to_args
955
+ )
917
956
918
957
annotated_field = _field_for_annotated_type (typ , ** metadata )
919
958
if annotated_field :
@@ -938,6 +977,7 @@ def _field_for_schema(
938
977
newtype_supertype = newtype_supertype ,
939
978
metadata = metadata ,
940
979
base_schema = base_schema ,
980
+ generic_params_to_args = generic_params_to_args ,
941
981
)
942
982
943
983
# enumerations
0 commit comments