diff options
author | Jelle Zijlstra <jelle.zijlstra@gmail.com> | 2025-03-04 19:44:19 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-04 19:44:19 (GMT) |
commit | dc6d66f44c0a25b69dfec7e4ffc4a6fa5e4feada (patch) | |
tree | 045fed4b7965d56ea45c009dad6dddb42d7be8b0 /Lib/functools.py | |
parent | e091520fdbcfe406e5fdcf66b7864b2b34a6726b (diff) | |
download | cpython-dc6d66f44c0a25b69dfec7e4ffc4a6fa5e4feada.zip cpython-dc6d66f44c0a25b69dfec7e4ffc4a6fa5e4feada.tar.gz cpython-dc6d66f44c0a25b69dfec7e4ffc4a6fa5e4feada.tar.bz2 |
gh-105499: Merge typing.Union and types.UnionType (#105511)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Co-authored-by: Ken Jin <kenjin@python.org>
Co-authored-by: Carl Meyer <carl@oddbird.net>
Diffstat (limited to 'Lib/functools.py')
-rw-r--r-- | Lib/functools.py | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/Lib/functools.py b/Lib/functools.py index 70c59b1..5e2579f 100644 --- a/Lib/functools.py +++ b/Lib/functools.py @@ -926,16 +926,11 @@ def singledispatch(func): dispatch_cache[cls] = impl return impl - def _is_union_type(cls): - from typing import get_origin, Union - return get_origin(cls) in {Union, UnionType} - def _is_valid_dispatch_type(cls): if isinstance(cls, type): return True - from typing import get_args - return (_is_union_type(cls) and - all(isinstance(arg, type) for arg in get_args(cls))) + return (isinstance(cls, UnionType) and + all(isinstance(arg, type) for arg in cls.__args__)) def register(cls, func=None): """generic_func.register(cls, func) -> func @@ -967,7 +962,7 @@ def singledispatch(func): from annotationlib import Format, ForwardRef argname, cls = next(iter(get_type_hints(func, format=Format.FORWARDREF).items())) if not _is_valid_dispatch_type(cls): - if _is_union_type(cls): + if isinstance(cls, UnionType): raise TypeError( f"Invalid annotation for {argname!r}. " f"{cls!r} not all arguments are classes." @@ -983,10 +978,8 @@ def singledispatch(func): f"{cls!r} is not a class." ) - if _is_union_type(cls): - from typing import get_args - - for arg in get_args(cls): + if isinstance(cls, UnionType): + for arg in cls.__args__: registry[arg] = func else: registry[cls] = func |