@@ -48,7 +48,11 @@ def is_union(x: Any) -> bool:
4848 return typing .get_origin (x ) in _UNION_TYPES
4949
5050
51- NO_DEFAULT = object ()
51+ class NoDefaultType :
52+ pass
53+
54+
55+ NO_DEFAULT = NoDefaultType ()
5256
5357
5458array_types : Tuple [Any , ...]
@@ -664,7 +668,7 @@ def get_typeddict_schema(
664668 """
665669 if include_default :
666670 return [
667- (k , v , getattr (obj , 'k' , NO_DEFAULT ))
671+ (k , v , getattr (obj , k , NO_DEFAULT ))
668672 for k , v in get_annotations (obj ).items ()
669673 ]
670674 return list (get_annotations (obj ).items ())
@@ -724,8 +728,7 @@ def get_namedtuple_schema(
724728 if include_default :
725729 return [
726730 (
727- k ,
728- v ,
731+ k , v ,
729732 obj ._field_defaults .get (k , NO_DEFAULT ),
730733 )
731734 for k , v in get_annotations (obj ).items ()
@@ -754,37 +757,51 @@ def get_colspec(
754757
755758 """
756759 overrides_colspec = []
760+
757761 if overrides :
762+
763+ # Dataclass
758764 if dataclasses .is_dataclass (overrides ):
759765 overrides_colspec = get_dataclass_schema (
760766 overrides , include_default = include_default ,
761767 )
768+
769+ # TypedDict
762770 elif is_typeddict (overrides ):
763771 overrides_colspec = get_typeddict_schema (
764772 overrides , include_default = include_default ,
765773 )
774+
775+ # Named tuple
766776 elif is_namedtuple (overrides ):
767777 overrides_colspec = get_namedtuple_schema (
768778 overrides , include_default = include_default ,
769779 )
780+
781+ # Pydantic model
770782 elif is_pydantic (overrides ):
771783 overrides_colspec = get_pydantic_schema (
772784 overrides , include_default = include_default ,
773785 )
786+
787+ # List of types
774788 elif isinstance (overrides , list ):
775789 if include_default :
776790 overrides_colspec = [
777791 (getattr (x , 'name' , '' ), x , NO_DEFAULT ) for x in overrides
778792 ]
779793 else :
780794 overrides_colspec = [(getattr (x , 'name' , '' ), x ) for x in overrides ]
795+
796+ # Other
781797 else :
782798 if include_default :
783799 overrides_colspec = [
784800 (getattr (overrides , 'name' , '' ), overrides , NO_DEFAULT ),
785801 ]
786802 else :
787803 overrides_colspec = [(getattr (overrides , 'name' , '' ), overrides )]
804+
788805 return overrides_colspec
789806
790807
0 commit comments