99import functools
1010import typing
1111from dataclasses import dataclass , is_dataclass
12- from typing import Any , Callable , Dict , List , Optional , TypeVar
12+ from typing import Any , Callable , Dict , Iterator , List , Optional , TypeVar
1313
1414import jinja2
1515from typing_extensions import Type , dataclass_transform
8787__all__ = ['deserialize' , 'is_deserializable' , 'from_dict' , 'from_tuple' ]
8888
8989# Interface of Custom deserialize function.
90- DeserializeFunc = Callable [[Type , Any ], Any ]
90+ DeserializeFunc = Callable [[Type [ Any ] , Any ], Any ]
9191
9292
93- def serde_custom_class_deserializer (cls : Type , datavar , value , custom : DeserializeFunc , default : Callable ):
93+ def serde_custom_class_deserializer (cls : Type [ Any ] , datavar , value , custom : DeserializeFunc , default : Callable ):
9494 """
9595 Handle custom deserialization. Use default deserialization logic if it receives `SerdeSkip` exception.
9696
@@ -106,7 +106,7 @@ def serde_custom_class_deserializer(cls: Type, datavar, value, custom: Deseriali
106106 return default ()
107107
108108
109- def default_deserializer (_cls : Type , obj ):
109+ def default_deserializer (_cls : Type [ Any ] , obj ):
110110 """
111111 Marker function to tell serde to use the default deserializer. It's used when custom deserializer is specified
112112 at the class but you want to override a field with the default deserializer.
@@ -590,7 +590,8 @@ def data(self, d):
590590 self .datavar = d
591591
592592
593- defields = functools .partial (fields , DeField )
593+ def defields (cls : Type [Any ]) -> List [DeField ]:
594+ return fields (DeField , cls )
594595
595596
596597@dataclass
@@ -884,7 +885,7 @@ def default(self, arg: DeField, code: str) -> str:
884885 return code
885886
886887
887- def to_arg (f : DeField , index , rename_all : Optional [str ] = None ) -> DeField :
888+ def to_arg (f : DeField , index : int , rename_all : Optional [str ] = None ) -> DeField :
888889 f .index = index
889890 f .data = 'data'
890891 f .case = f .case or rename_all
@@ -897,7 +898,7 @@ def to_iter_arg(f: DeField, *args, **kwargs) -> DeField:
897898 return f
898899
899900
900- def render_from_iter (cls : Type , custom : Optional [DeserializeFunc ] = None , type_check : TypeCheck = NoCheck ) -> str :
901+ def render_from_iter (cls : Type [ Any ] , custom : Optional [DeserializeFunc ] = None , type_check : TypeCheck = NoCheck ) -> str :
901902 template = """
902903def {{func}}(cls=cls, maybe_generic=None, data=None, reuse_instances = {{serde_scope.reuse_instances_default}}):
903904 if reuse_instances is Ellipsis:
@@ -933,7 +934,7 @@ def {{func}}(cls=cls, maybe_generic=None, data=None, reuse_instances = {{serde_s
933934
934935
935936def render_from_dict (
936- cls : Type ,
937+ cls : Type [ Any ] ,
937938 rename_all : Optional [str ] = None ,
938939 custom : Optional [DeserializeFunc ] = None ,
939940 type_check : TypeCheck = NoCheck ,
@@ -981,7 +982,7 @@ def {{func}}(cls=cls, maybe_generic=None, data=None,
981982 return res
982983
983984
984- def render_union_func (cls : Type , union_args : List [Type ], tagging : Tagging = DefaultTagging ) -> str :
985+ def render_union_func (cls : Type [ Any ] , union_args : List [Type ], tagging : Tagging = DefaultTagging ) -> str :
985986 template = """
986987def {{func}}(cls=cls, maybe_generic=None, data=None, reuse_instances = {{serde_scope.reuse_instances_default}}):
987988 errors = []
@@ -1039,7 +1040,7 @@ def {{func}}(cls=cls, maybe_generic=None, data=None, reuse_instances = {{serde_s
10391040 )
10401041
10411042
1042- def render_literal_func (cls : Type , literal_args : List [Any ], tagging : Tagging = DefaultTagging ) -> str :
1043+ def render_literal_func (cls : Type [ Any ] , literal_args : List [Any ], tagging : Tagging = DefaultTagging ) -> str :
10431044 template = """
10441045def {{func}}(cls=cls, maybe_generic=None, data=None, reuse_instances = {{serde_scope.reuse_instances_default}}):
10451046 if data in ({%- for v in literal_args -%}{{v|repr}},{%- endfor -%}):
0 commit comments