From 1bc936141584cf575cfcab8d92afb29616af9384 Mon Sep 17 00:00:00 2001 From: hauntsaninja <> Date: Sun, 2 May 2021 13:32:18 -0700 Subject: [PATCH] enum: update for py310 I remember there are some subtleties around Enum.__new__, that might be relevant to StrEnum, but I'm forgetting the details. I wasn't sure how best to handle the new enum.property. I could also re-export, or take a more literal interpretation. --- stdlib/enum.pyi | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/stdlib/enum.pyi b/stdlib/enum.pyi index 9b44bc020d77..b5549253afc7 100644 --- a/stdlib/enum.pyi +++ b/stdlib/enum.pyi @@ -1,5 +1,6 @@ import sys from abc import ABCMeta +from builtins import property as _builtins_property from typing import Any, Dict, Iterator, List, Mapping, Type, TypeVar, Union _T = TypeVar("_T") @@ -15,7 +16,7 @@ class EnumMeta(ABCMeta): def __reversed__(self: Type[_T]) -> Iterator[_T]: ... def __contains__(self: Type[Any], member: object) -> bool: ... def __getitem__(self: Type[_T], name: str) -> _T: ... - @property + @_builtins_property def __members__(self: Type[_T]) -> Mapping[str, _T]: ... def __len__(self) -> int: ... @@ -74,3 +75,20 @@ class IntFlag(int, Flag): __ror__ = __or__ __rand__ = __and__ __rxor__ = __xor__ + +if sys.version_info >= (3, 10): + class StrEnum(str, Enum): + def __new__(cls: Type[_T], value: Union[int, _T]) -> _T: ... + class FlagBoundary(StrEnum): + STRICT: str + CONFORM: str + EJECT: str + KEEP: str + STRICT = FlagBoundary.STRICT + CONFORM = FlagBoundary.CONFORM + EJECT = FlagBoundary.EJECT + KEEP = FlagBoundary.KEEP + class property(_builtins_property): ... + def global_enum(cls: _S) -> _S: ... + def global_enum_repr(self: Enum) -> str: ... + def global_flag_repr(self: Flag) -> str: ...