Update enum for py312 (#10670)

This commit is contained in:
Alex Waygood
2023-09-11 11:26:18 +01:00
committed by GitHub
parent a570fb6ced
commit 23249c07a9
3 changed files with 45 additions and 8 deletions

View File

@@ -119,10 +119,12 @@ class EnumMeta(type):
def __len__(self) -> int: ...
def __bool__(self) -> Literal[True]: ...
def __dir__(self) -> list[str]: ...
# Simple value lookup
# Overload 1: Value lookup on an already existing enum class (simple case)
@overload
def __call__(cls: type[_EnumMemberT], value: Any, names: None = None) -> _EnumMemberT: ...
# Functional Enum API
# Overload 2: Functional API for constructing new enum classes.
if sys.version_info >= (3, 11):
@overload
def __call__(
@@ -148,6 +150,18 @@ class EnumMeta(type):
type: type | None = None,
start: int = 1,
) -> type[Enum]: ...
# Overload 3 (py312+ only): Value lookup on an already existing enum class (complex case)
#
# >>> class Foo(enum.Enum):
# ... X = 1, 2, 3
# >>> Foo(1, 2, 3)
# <Foo.X: (1, 2, 3)>
#
if sys.version_info >= (3, 12):
@overload
def __call__(cls: type[_EnumMemberT], value: Any, *values: Any) -> _EnumMemberT: ...
_member_names_: list[str] # undocumented
_member_map_: dict[str, Enum] # undocumented
_value2member_map_: dict[Any, Enum] # undocumented
@@ -160,6 +174,7 @@ if sys.version_info >= (3, 11):
def __set_name__(self, ownerclass: type[Enum], name: str) -> None: ...
name: str
clsname: str
member: Enum | None
_magic_enum_attr = property
else:
_magic_enum_attr = types.DynamicClassAttribute
@@ -191,6 +206,9 @@ class Enum(metaclass=EnumMeta):
if sys.version_info >= (3, 11):
def __copy__(self) -> Self: ...
def __deepcopy__(self, memo: Any) -> Self: ...
if sys.version_info >= (3, 12):
@classmethod
def __signature__(cls) -> str: ...
if sys.version_info >= (3, 11):
class ReprEnum(Enum): ...

View File

@@ -2,8 +2,33 @@ from __future__ import annotations
import enum
import sys
from typing import Type
from typing_extensions import Literal, assert_type
A = enum.Enum("A", "spam eggs bacon")
B = enum.Enum("B", ["spam", "eggs", "bacon"])
C = enum.Enum("Bar", [("spam", 1), ("eggs", 2), ("bacon", 3)])
D = enum.Enum("Bar", {"spam": 1, "eggs": 2})
assert_type(A, Type[A])
assert_type(B, Type[B])
assert_type(C, Type[C])
assert_type(D, Type[D])
class EnumOfTuples(enum.Enum):
X = 1, 2, 3
Y = 4, 5, 6
assert_type(EnumOfTuples((1, 2, 3)), EnumOfTuples)
# TODO: ideally this test would pass:
#
# if sys.version_info >= (3, 12):
# assert_type(EnumOfTuples(1, 2, 3), EnumOfTuples)
if sys.version_info >= (3, 11):
class Foo(enum.StrEnum):

View File

@@ -1,9 +1,3 @@
# Uncategorised, from Python 3.12
enum.Enum.__signature__
enum.EnumMeta.__call__
enum.EnumType.__call__
enum.property.member
# Errors that also existed on Python 3.11
_collections_abc.AsyncIterable.__class_getitem__
_collections_abc.Awaitable.__class_getitem__