From 9c3b629f5b8459b01543363a55808ff44e869bc5 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Sat, 26 Feb 2022 16:37:48 +0000 Subject: [PATCH 1/2] Fix several mypy errors when run on the 3.11 stdlib --- stdlib/asyncio/base_events.pyi | 2 +- stdlib/builtins.pyi | 2 +- stdlib/enum.pyi | 74 +++++++++++++--------------------- 3 files changed, 30 insertions(+), 48 deletions(-) diff --git a/stdlib/asyncio/base_events.pyi b/stdlib/asyncio/base_events.pyi index 02aff1ac23f7..1d52942bf6c5 100644 --- a/stdlib/asyncio/base_events.pyi +++ b/stdlib/asyncio/base_events.pyi @@ -298,7 +298,7 @@ class BaseEventLoop(AbstractEventLoop): self, protocol_factory: Callable[[], _ProtocolT], sock: socket, *, ssl: _SSLContext = ... ) -> tuple[BaseTransport, _ProtocolT]: ... if sys.version_info >= (3, 11): - async def create_datagram_endpoint( + async def create_datagram_endpoint( # type: ignore[override] self, protocol_factory: Callable[[], _ProtocolT], local_addr: tuple[str, int] | None = ..., diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index b327deddc7d1..4f89454716e7 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -1710,7 +1710,7 @@ if sys.version_info >= (3, 10): class EncodingWarning(Warning): ... if sys.version_info >= (3, 11): - _SplitCondition = type[BaseException] | tuple[type[BaseException], ...] | Callable[[BaseException], bool] + _SplitCondition = Union[type[BaseException], tuple[type[BaseException], ...], Callable[[BaseException], bool]] class BaseExceptionGroup(BaseException): def __new__(cls: type[Self], __message: str, __exceptions: Sequence[BaseException]) -> Self: ... diff --git a/stdlib/enum.pyi b/stdlib/enum.pyi index 86fa192750c4..92c089f22685 100644 --- a/stdlib/enum.pyi +++ b/stdlib/enum.pyi @@ -136,17 +136,20 @@ if sys.version_info >= (3, 11): # In 3.11 `EnumMeta` metaclass is renamed to `EnumType`, but old name also exists. EnumType = EnumMeta + class property(types.DynamicClassAttribute): + def __set_name__(self, ownerclass: type[Enum], name: str) -> None: ... + name: str + clsname: str + + _magic_enum_attr = property +else: + _magic_enum_attr = types.DynamicClassAttribute + class Enum(metaclass=EnumMeta): - if sys.version_info >= (3, 11): - @property - def name(self) -> str: ... - @property - def value(self) -> Any: ... - else: - @types.DynamicClassAttribute - def name(self) -> str: ... - @types.DynamicClassAttribute - def value(self) -> Any: ... + @_magic_enum_attr + def name(self) -> str: ... + @_magic_enum_attr + def value(self) -> Any: ... _name_: str _value_: Any if sys.version_info >= (3, 7): @@ -165,20 +168,15 @@ class Enum(metaclass=EnumMeta): if sys.version_info >= (3, 11): class ReprEnum(Enum): ... - -if sys.version_info >= (3, 11): - class IntEnum(int, ReprEnum): - _value_: int - @property - def value(self) -> int: ... - def __new__(cls: type[Self], value: int) -> Self: ... - + _IntEnumBase = ReprEnum else: - class IntEnum(int, Enum): - _value_: int - @types.DynamicClassAttribute - def value(self) -> int: ... - def __new__(cls: type[Self], value: int) -> Self: ... + _IntEnumBase = Enum + +class IntEnum(int, _IntEnumBase): + _value_: int + @_magic_enum_attr + def value(self) -> int: ... + def __new__(cls: type[Self], value: int) -> Self: ... def unique(enumeration: _EnumerationT) -> _EnumerationT: ... @@ -187,29 +185,17 @@ _auto_null: Any # subclassing IntFlag so it picks up all implemented base functions, best modeling behavior of enum.auto() class auto(IntFlag): _value_: Any - if sys.version_info >= (3, 11): - @property - def value(self) -> Any: ... - else: - @types.DynamicClassAttribute - def value(self) -> Any: ... - + @_magic_enum_attr + def value(self) -> Any: ... def __new__(cls: type[Self]) -> Self: ... class Flag(Enum): _name_: str | None # type: ignore[assignment] _value_: int - if sys.version_info >= (3, 11): - @property - def name(self) -> str | None: ... # type: ignore[override] - @property - def value(self) -> int: ... - else: - @types.DynamicClassAttribute - def name(self) -> str | None: ... # type: ignore[override] - @types.DynamicClassAttribute - def value(self) -> int: ... - + @_magic_enum_attr + def name(self) -> str | None: ... # type: ignore[override] + @_magic_enum_attr + def value(self) -> int: ... def __contains__(self: Self, other: Self) -> bool: ... def __bool__(self) -> bool: ... def __or__(self: Self, other: Self) -> Self: ... @@ -230,7 +216,7 @@ if sys.version_info >= (3, 11): class StrEnum(str, ReprEnum): def __new__(cls: type[Self], value: str) -> Self: ... _value_: str - @property + @_magic_enum_attr def value(self) -> str: ... class EnumCheck(StrEnum): @@ -255,10 +241,6 @@ if sys.version_info >= (3, 11): EJECT = FlagBoundary.EJECT KEEP = FlagBoundary.KEEP - class property(types.DynamicClassAttribute): - def __set_name__(self, ownerclass: type[Enum], name: str) -> None: ... - name: str - clsname: str def global_str(self: Enum) -> str: ... def global_enum(cls: _EnumerationT, update_str: bool = ...) -> _EnumerationT: ... def global_enum_repr(self: Enum) -> str: ... From 0a3f973e17cc4a13ad9da69b4622e4e56abd29b9 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 26 Feb 2022 16:45:42 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stdlib/enum.pyi | 1 - 1 file changed, 1 deletion(-) diff --git a/stdlib/enum.pyi b/stdlib/enum.pyi index 92c089f22685..556ace6d016d 100644 --- a/stdlib/enum.pyi +++ b/stdlib/enum.pyi @@ -140,7 +140,6 @@ if sys.version_info >= (3, 11): def __set_name__(self, ownerclass: type[Enum], name: str) -> None: ... name: str clsname: str - _magic_enum_attr = property else: _magic_enum_attr = types.DynamicClassAttribute