File tree Expand file tree Collapse file tree 4 files changed +23
-1
lines changed Expand file tree Collapse file tree 4 files changed +23
-1
lines changed Original file line number Diff line number Diff line change @@ -142,7 +142,7 @@ def get_type_graph(t: type) -> graphlib.TopologicalSorter[TypeNode]:
142142 qualname = inspection .qualname (child )
143143 * rest , refname = qualname .split ("." , maxsplit = 1 )
144144 is_argument = var is not None
145- module = getattr (child , "__module__" , None )
145+ module = "." . join ( rest ) or getattr (child , "__module__" , None )
146146 if module in (None , "__main__" ) and rest :
147147 module = rest [0 ]
148148 is_class = inspect .isclass (child )
Original file line number Diff line number Diff line change @@ -480,6 +480,13 @@ def isbuiltintype(
480480
481481@compat .cache
482482def isstdlibtype (obj : type ) -> compat .TypeIs [type [STDLibtypeT ]]:
483+ if isoptionaltype (obj ):
484+ nargs = tp .get_args (obj )[:- 1 ]
485+ return all (isstdlibtype (a ) for a in nargs )
486+ if isuniontype (obj ):
487+ args = tp .get_args (obj )
488+ return all (isstdlibtype (a ) for a in args )
489+
483490 return (
484491 resolve_supertype (obj ) in STDLIB_TYPES
485492 or resolve_supertype (type (obj )) in STDLIB_TYPES
Original file line number Diff line number Diff line change 11from __future__ import annotations
22
33import dataclasses
4+ import datetime
45import enum
56import typing
67
@@ -54,3 +55,10 @@ class TDict(typing.TypedDict):
5455
5556class GivenEnum (enum .Enum ):
5657 one = "one"
58+
59+
60+ @dataclasses .dataclass
61+ class UnionSTDLib :
62+ timestamp : datetime .datetime | None = None
63+ date_time : datetime .datetime | None = None
64+ intstr : int | str = 0
Original file line number Diff line number Diff line change 142142 given_input = "one" ,
143143 expected_output = models .GivenEnum .one ,
144144 ),
145+ union_std_lib = dict (
146+ given_type = models .UnionSTDLib ,
147+ given_input = {"timestamp" : 0 },
148+ expected_output = models .UnionSTDLib (
149+ timestamp = datetime .datetime .fromtimestamp (0 , datetime .timezone .utc )
150+ ),
151+ ),
145152)
146153def test_unmarshal (given_type , given_input , expected_output ):
147154 # When
You can’t perform that action at this time.
0 commit comments