self.assertIs(get_origin(Callable), collections.abc.Callable)
self.assertIs(get_origin(list[int]), list)
self.assertIs(get_origin(list), None)
+ self.assertIs(get_origin(list | str), types.Union)
def test_get_args(self):
T = TypeVar('T')
self.assertEqual(get_args(collections.abc.Callable[[], str]), ([], str))
self.assertEqual(get_args(collections.abc.Callable[[int], str]),
get_args(Callable[[int], str]))
+ P = ParamSpec('P')
+ self.assertEqual(get_args(Callable[P, int]), (P, int))
+ self.assertEqual(get_args(Callable[Concatenate[int, P], int]),
+ (Concatenate[int, P], int))
+ self.assertEqual(get_args(list | str), (list, str))
class CollectionsAbcTests(BaseTestCase):
return tp.__origin__
if tp is Generic:
return Generic
+ if isinstance(tp, types.Union):
+ return types.Union
return None
return (tp.__origin__,) + tp.__metadata__
if isinstance(tp, (_GenericAlias, GenericAlias)):
res = tp.__args__
- if tp.__origin__ is collections.abc.Callable and res[0] is not Ellipsis:
+ if (tp.__origin__ is collections.abc.Callable
+ and not (res[0] is Ellipsis
+ or isinstance(res[0], (ParamSpec, _ConcatenateGenericAlias)))):
res = (list(res[:-1]), res[-1])
return res
+ if isinstance(tp, types.Union):
+ return tp.__args__
return ()