mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-08 04:54:47 +08:00
Update enum for py312 (#10670)
This commit is contained in:
@@ -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): ...
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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__
|
||||
|
||||
Reference in New Issue
Block a user