From 571e375c6a865abb20b0c8db2dec472fecc968c0 Mon Sep 17 00:00:00 2001 From: AlexWaygood Date: Sun, 31 Jul 2022 10:30:11 +0100 Subject: [PATCH 1/3] Remove, move or `# noqa` more `TypeAlias` declarations --- stdlib/email/__init__.pyi | 4 ++-- stdlib/lib2to3/pgen2/__init__.pyi | 2 +- stdlib/multiprocessing/__init__.pyi | 29 +++----------------------- stdlib/tkinter/__init__.pyi | 7 ------- stdlib/tkinter/ttk.pyi | 32 ++++++++++++++++++----------- 5 files changed, 26 insertions(+), 48 deletions(-) diff --git a/stdlib/email/__init__.pyi b/stdlib/email/__init__.pyi index 78368a2cf4a0..4591b2c3340e 100644 --- a/stdlib/email/__init__.pyi +++ b/stdlib/email/__init__.pyi @@ -5,8 +5,8 @@ from typing import IO, Union from typing_extensions import TypeAlias # Definitions imported by multiple submodules in typeshed -_ParamType: TypeAlias = Union[str, tuple[str | None, str | None, str]] -_ParamsType: TypeAlias = Union[str, None, tuple[str, str | None, str]] +_ParamType: TypeAlias = Union[str, tuple[str | None, str | None, str]] # noqa: Y047 +_ParamsType: TypeAlias = Union[str, None, tuple[str, str | None, str]] # noqa: Y047 def message_from_string(s: str, _class: Callable[[], Message] = ..., *, policy: Policy = ...) -> Message: ... def message_from_bytes(s: bytes, _class: Callable[[], Message] = ..., *, policy: Policy = ...) -> Message: ... diff --git a/stdlib/lib2to3/pgen2/__init__.pyi b/stdlib/lib2to3/pgen2/__init__.pyi index 15c76865d606..acc1cc429be9 100644 --- a/stdlib/lib2to3/pgen2/__init__.pyi +++ b/stdlib/lib2to3/pgen2/__init__.pyi @@ -5,4 +5,4 @@ from typing import Any from typing_extensions import TypeAlias # This is imported in several lib2to3/pgen2 submodules -_Convert: TypeAlias = Callable[[Grammar, _RawNode], Any] +_Convert: TypeAlias = Callable[[Grammar, _RawNode], Any] # noqa: Y047 diff --git a/stdlib/multiprocessing/__init__.pyi b/stdlib/multiprocessing/__init__.pyi index 4359b6c080aa..dd0042b280dd 100644 --- a/stdlib/multiprocessing/__init__.pyi +++ b/stdlib/multiprocessing/__init__.pyi @@ -1,5 +1,5 @@ import sys -from multiprocessing import context, reduction as reducer, synchronize +from multiprocessing import context, reduction as reducer from multiprocessing.context import ( AuthenticationError as AuthenticationError, BufferTooShort as BufferTooShort, @@ -10,12 +10,10 @@ from multiprocessing.context import ( from multiprocessing.process import active_children as active_children, current_process as current_process # These are technically functions that return instances of these Queue classes. -# Using them as annotations is deprecated. Either use imports from -# multiprocessing.queues or the aliases defined below. See #4266 for discussion. +# Using them as annotations is deprecated. Use imports from multiprocessing.queues instead. +# See #4266 for discussion. from multiprocessing.queues import JoinableQueue as JoinableQueue, Queue as Queue, SimpleQueue as SimpleQueue from multiprocessing.spawn import freeze_support as freeze_support -from typing import TypeVar -from typing_extensions import TypeAlias if sys.version_info >= (3, 8): from multiprocessing.process import parent_process as parent_process @@ -62,27 +60,6 @@ __all__ = [ if sys.version_info >= (3, 8): __all__ += ["parent_process"] -# The following type aliases can be used to annotate the return values of -# the corresponding functions. They are not defined at runtime. -# -# from multiprocessing import Lock -# from typing import TYPE_CHECKING -# if TYPE_CHECKING: -# from multiprocessing import _LockType -# lock: _LockType = Lock() - -_T = TypeVar("_T") -_QueueType: TypeAlias = Queue[_T] -_SimpleQueueType: TypeAlias = SimpleQueue[_T] -_JoinableQueueType: TypeAlias = JoinableQueue[_T] -_BarrierType: TypeAlias = synchronize.Barrier -_BoundedSemaphoreType: TypeAlias = synchronize.BoundedSemaphore -_ConditionType: TypeAlias = synchronize.Condition -_EventType: TypeAlias = synchronize.Event -_LockType: TypeAlias = synchronize.Lock -_RLockType: TypeAlias = synchronize.RLock -_SemaphoreType: TypeAlias = synchronize.Semaphore - # These functions (really bound methods) # are all autogenerated at runtime here: https://github.com/python/cpython/blob/600c65c094b0b48704d8ec2416930648052ba715/Lib/multiprocessing/__init__.py#L23 RawValue = context._default_context.RawValue diff --git a/stdlib/tkinter/__init__.pyi b/stdlib/tkinter/__init__.pyi index 0955992d2688..63dd423fe1e5 100644 --- a/stdlib/tkinter/__init__.pyi +++ b/stdlib/tkinter/__init__.pyi @@ -186,13 +186,6 @@ _EntryValidateCommand: TypeAlias = ( ) # example when it's sequence: entry['invalidcommand'] = [entry.register(print), '%P'] _GridIndex: TypeAlias = int | str | Literal["all"] _ImageSpec: TypeAlias = _Image | str # str can be from e.g. tkinter.image_names() -_Padding: TypeAlias = Union[ - _ScreenUnits, - tuple[_ScreenUnits], - tuple[_ScreenUnits, _ScreenUnits], - tuple[_ScreenUnits, _ScreenUnits, _ScreenUnits], - tuple[_ScreenUnits, _ScreenUnits, _ScreenUnits, _ScreenUnits], -] _Relief: TypeAlias = Literal["raised", "sunken", "flat", "ridge", "solid", "groove"] # manual page: Tk_GetRelief _ScreenUnits: TypeAlias = str | float # Often the right type instead of int. Manual page: Tk_GetPixels _XYScrollCommand: TypeAlias = str | Callable[[float, float], Any] # -xscrollcommand and -yscrollcommand in 'options' manual page diff --git a/stdlib/tkinter/ttk.pyi b/stdlib/tkinter/ttk.pyi index 81077200289f..c34cdb6be018 100644 --- a/stdlib/tkinter/ttk.pyi +++ b/stdlib/tkinter/ttk.pyi @@ -3,7 +3,7 @@ import sys import tkinter from collections.abc import Callable from tkinter.font import _FontDescription -from typing import Any, overload +from typing import Any, Union, overload from typing_extensions import Literal, TypeAlias, TypedDict __all__ = [ @@ -37,6 +37,14 @@ __all__ = [ def tclobjs_to_py(adict: dict[Any, Any]) -> dict[Any, Any]: ... def setup_master(master: Any | None = ...): ... +_Padding: TypeAlias = Union[ + tkinter._ScreenUnits, + tuple[tkinter._ScreenUnits], + tuple[tkinter._ScreenUnits, tkinter._ScreenUnits], + tuple[tkinter._ScreenUnits, tkinter._ScreenUnits, tkinter._ScreenUnits], + tuple[tkinter._ScreenUnits, tkinter._ScreenUnits, tkinter._ScreenUnits, tkinter._ScreenUnits], +] + # from ttk_widget (aka ttk::widget) manual page, differs from tkinter._Compound _TtkCompound: TypeAlias = Literal["text", "image", tkinter._Compound] @@ -336,7 +344,7 @@ class Frame(Widget): cursor: tkinter._Cursor = ..., height: tkinter._ScreenUnits = ..., name: str = ..., - padding: tkinter._Padding = ..., + padding: _Padding = ..., relief: tkinter._Relief = ..., style: str = ..., takefocus: tkinter._TakeFocusValue = ..., @@ -351,7 +359,7 @@ class Frame(Widget): borderwidth: tkinter._ScreenUnits = ..., cursor: tkinter._Cursor = ..., height: tkinter._ScreenUnits = ..., - padding: tkinter._Padding = ..., + padding: _Padding = ..., relief: tkinter._Relief = ..., style: str = ..., takefocus: tkinter._TakeFocusValue = ..., @@ -378,7 +386,7 @@ class Label(Widget): image: tkinter._ImageSpec = ..., justify: Literal["left", "center", "right"] = ..., name: str = ..., - padding: tkinter._Padding = ..., + padding: _Padding = ..., relief: tkinter._Relief = ..., state: str = ..., style: str = ..., @@ -404,7 +412,7 @@ class Label(Widget): foreground: tkinter._Color = ..., image: tkinter._ImageSpec = ..., justify: Literal["left", "center", "right"] = ..., - padding: tkinter._Padding = ..., + padding: _Padding = ..., relief: tkinter._Relief = ..., state: str = ..., style: str = ..., @@ -432,7 +440,7 @@ class Labelframe(Widget): labelanchor: Literal["nw", "n", "ne", "en", "e", "es", "se", "s", "sw", "ws", "w", "wn"] = ..., labelwidget: tkinter.Misc = ..., name: str = ..., - padding: tkinter._Padding = ..., + padding: _Padding = ..., relief: tkinter._Relief = ..., # undocumented style: str = ..., takefocus: tkinter._TakeFocusValue = ..., @@ -451,7 +459,7 @@ class Labelframe(Widget): height: tkinter._ScreenUnits = ..., labelanchor: Literal["nw", "n", "ne", "en", "e", "es", "se", "s", "sw", "ws", "w", "wn"] = ..., labelwidget: tkinter.Misc = ..., - padding: tkinter._Padding = ..., + padding: _Padding = ..., relief: tkinter._Relief = ..., style: str = ..., takefocus: tkinter._TakeFocusValue = ..., @@ -518,7 +526,7 @@ class Notebook(Widget): cursor: tkinter._Cursor = ..., height: int = ..., name: str = ..., - padding: tkinter._Padding = ..., + padding: _Padding = ..., style: str = ..., takefocus: tkinter._TakeFocusValue = ..., width: int = ..., @@ -530,7 +538,7 @@ class Notebook(Widget): *, cursor: tkinter._Cursor = ..., height: int = ..., - padding: tkinter._Padding = ..., + padding: _Padding = ..., style: str = ..., takefocus: tkinter._TakeFocusValue = ..., width: int = ..., @@ -544,7 +552,7 @@ class Notebook(Widget): *, state: Literal["normal", "disabled", "hidden"] = ..., sticky: str = ..., # consists of letters 'n', 's', 'w', 'e', no repeats, may be empty - padding: tkinter._Padding = ..., + padding: _Padding = ..., text: str = ..., image: Any = ..., # Sequence of an image name, followed by zero or more (sequences of one or more state names followed by an image name) compound: tkinter._Compound = ..., @@ -957,7 +965,7 @@ class Treeview(Widget, tkinter.XView, tkinter.YView): displaycolumns: str | list[str] | tuple[str, ...] | list[int] | tuple[int, ...] | Literal["#all"] = ..., height: int = ..., name: str = ..., - padding: tkinter._Padding = ..., + padding: _Padding = ..., selectmode: Literal["extended", "browse", "none"] = ..., # list/tuple of Literal don't actually work in mypy # @@ -978,7 +986,7 @@ class Treeview(Widget, tkinter.XView, tkinter.YView): cursor: tkinter._Cursor = ..., displaycolumns: str | list[str] | tuple[str, ...] | list[int] | tuple[int, ...] | Literal["#all"] = ..., height: int = ..., - padding: tkinter._Padding = ..., + padding: _Padding = ..., selectmode: Literal["extended", "browse", "none"] = ..., show: Literal["tree", "headings", "tree headings", ""] | list[str] | tuple[str, ...] = ..., style: str = ..., From 1424f105281e2b2f753571f3000b41ae61ac73f3 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Fri, 5 Aug 2022 12:36:57 +0100 Subject: [PATCH 2/3] Improve comment --- stdlib/multiprocessing/__init__.pyi | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/stdlib/multiprocessing/__init__.pyi b/stdlib/multiprocessing/__init__.pyi index dd0042b280dd..6cd40eb0407c 100644 --- a/stdlib/multiprocessing/__init__.pyi +++ b/stdlib/multiprocessing/__init__.pyi @@ -10,8 +10,12 @@ from multiprocessing.context import ( from multiprocessing.process import active_children as active_children, current_process as current_process # These are technically functions that return instances of these Queue classes. -# Using them as annotations is deprecated. Use imports from multiprocessing.queues instead. -# See #4266 for discussion. +# The stub here doesn't reflect reality exactly -- +# while e.g. `multiprocessing.queues.Queue` is a class, +# `multiprocessing.Queue` is actually a function at runtime. +# Avoid using `multiprocessing.Queue` as a type annotation; +# use imports from multiprocessing.queues instead. +# See #4266 and #8450 for discussion. from multiprocessing.queues import JoinableQueue as JoinableQueue, Queue as Queue, SimpleQueue as SimpleQueue from multiprocessing.spawn import freeze_support as freeze_support From afbf1435c7cc65a632ae567e99dc6febada13be2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 5 Aug 2022 11:38:04 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stdlib/multiprocessing/__init__.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/multiprocessing/__init__.pyi b/stdlib/multiprocessing/__init__.pyi index 6cd40eb0407c..186bd54a021d 100644 --- a/stdlib/multiprocessing/__init__.pyi +++ b/stdlib/multiprocessing/__init__.pyi @@ -13,7 +13,7 @@ from multiprocessing.process import active_children as active_children, current_ # The stub here doesn't reflect reality exactly -- # while e.g. `multiprocessing.queues.Queue` is a class, # `multiprocessing.Queue` is actually a function at runtime. -# Avoid using `multiprocessing.Queue` as a type annotation; +# Avoid using `multiprocessing.Queue` as a type annotation; # use imports from multiprocessing.queues instead. # See #4266 and #8450 for discussion. from multiprocessing.queues import JoinableQueue as JoinableQueue, Queue as Queue, SimpleQueue as SimpleQueue