Improve enums (#3168)

I realized while working on srittau/type-stub-pep#64 that a
few things we do in existing enum definitions in typeshed are
problematic:

- Using "= ..." doesn't allow type checkers to correctly type the
  result of Enum.MEMBER.value. In fact, mypy at least infers
  .value to be "Ellipsis" if you do this.
- Properties on the enum values themselves, like HTTPStatus.phrase,
  should not be specified directly as attributes, because it makes
  type checkers think that the properties themselves are enum
  members.

I ended up doing a bit more cleanup to the signal module:
- Remove unnecessary ... initializers.
- Remove unnecessary _SIG = Signals alias.
- I don't have Windows to test, but the C code for _signal suggests
  that CTRL_C_EVENT and CTRL_BREAK events are not Signals, but just ints:
  1dbd084f1f/Modules/signalmodule.c (L1575)
This commit is contained in:
Jelle Zijlstra
2019-08-05 08:08:57 -07:00
committed by GitHub
parent 1dc24e1c67
commit d05a9d3d83
5 changed files with 239 additions and 243 deletions

View File

@@ -10,8 +10,8 @@ if sys.version_info >= (3,):
from enum import Enum
class PlistFormat(Enum):
FMT_XML = ...
FMT_BINARY = ...
FMT_XML: int
FMT_BINARY: int
FMT_XML = PlistFormat.FMT_XML
FMT_BINARY = PlistFormat.FMT_BINARY

View File

@@ -411,45 +411,45 @@ if sys.version_info >= (3, 4):
from enum import IntEnum
class AddressFamily(IntEnum):
AF_UNIX = ...
AF_INET = ...
AF_INET6 = ...
AF_APPLETALK = ...
AF_ASH = ...
AF_ATMPVC = ...
AF_ATMSVC = ...
AF_AX25 = ...
AF_BLUETOOTH = ...
AF_BRIDGE = ...
AF_DECnet = ...
AF_ECONET = ...
AF_IPX = ...
AF_IRDA = ...
AF_KEY = ...
AF_LLC = ...
AF_NETBEUI = ...
AF_NETLINK = ...
AF_NETROM = ...
AF_PACKET = ...
AF_PPPOX = ...
AF_ROSE = ...
AF_ROUTE = ...
AF_SECURITY = ...
AF_SNA = ...
AF_TIPC = ...
AF_UNSPEC = ...
AF_WANPIPE = ...
AF_X25 = ...
AF_LINK = ...
AF_UNIX: int
AF_INET: int
AF_INET6: int
AF_APPLETALK: int
AF_ASH: int
AF_ATMPVC: int
AF_ATMSVC: int
AF_AX25: int
AF_BLUETOOTH: int
AF_BRIDGE: int
AF_DECnet: int
AF_ECONET: int
AF_IPX: int
AF_IRDA: int
AF_KEY: int
AF_LLC: int
AF_NETBEUI: int
AF_NETLINK: int
AF_NETROM: int
AF_PACKET: int
AF_PPPOX: int
AF_ROSE: int
AF_ROUTE: int
AF_SECURITY: int
AF_SNA: int
AF_TIPC: int
AF_UNSPEC: int
AF_WANPIPE: int
AF_X25: int
AF_LINK: int
class SocketKind(IntEnum):
SOCK_STREAM = ...
SOCK_DGRAM = ...
SOCK_RAW = ...
SOCK_RDM = ...
SOCK_SEQPACKET = ...
SOCK_CLOEXEC = ...
SOCK_NONBLOCK = ...
SOCK_STREAM: int
SOCK_DGRAM: int
SOCK_RAW: int
SOCK_RDM: int
SOCK_SEQPACKET: int
SOCK_CLOEXEC: int
SOCK_NONBLOCK: int
else:
AddressFamily = int
SocketKind = int
@@ -458,23 +458,23 @@ if sys.version_info >= (3, 6):
from enum import IntFlag
class AddressInfo(IntFlag):
AI_ADDRCONFIG = ...
AI_ALL = ...
AI_CANONNAME = ...
AI_NUMERICHOST = ...
AI_NUMERICSERV = ...
AI_PASSIVE = ...
AI_V4MAPPED = ...
AI_ADDRCONFIG: int
AI_ALL: int
AI_CANONNAME: int
AI_NUMERICHOST: int
AI_NUMERICSERV: int
AI_PASSIVE: int
AI_V4MAPPED: int
class MsgFlag(IntFlag):
MSG_CTRUNC = ...
MSG_DONTROUTE = ...
MSG_DONTWAIT = ...
MSG_EOR = ...
MSG_OOB = ...
MSG_PEEK = ...
MSG_TRUNC = ...
MSG_WAITALL = ...
MSG_CTRUNC: int
MSG_DONTROUTE: int
MSG_DONTWAIT: int
MSG_EOR: int
MSG_OOB: int
MSG_PEEK: int
MSG_TRUNC: int
MSG_WAITALL: int
else:
AddressInfo = int
MsgFlag = int

View File

@@ -1,67 +1,65 @@
import sys
from enum import IntEnum
class HTTPStatus(IntEnum):
def __init__(self, *a) -> None: ...
@property
def phrase(self) -> str: ...
@property
def description(self) -> str: ...
phrase: str
description: str
CONTINUE = ...
SWITCHING_PROTOCOLS = ...
PROCESSING = ...
OK = ...
CREATED = ...
ACCEPTED = ...
NON_AUTHORITATIVE_INFORMATION = ...
NO_CONTENT = ...
RESET_CONTENT = ...
PARTIAL_CONTENT = ...
MULTI_STATUS = ...
ALREADY_REPORTED = ...
IM_USED = ...
MULTIPLE_CHOICES = ...
MOVED_PERMANENTLY = ...
FOUND = ...
SEE_OTHER = ...
NOT_MODIFIED = ...
USE_PROXY = ...
TEMPORARY_REDIRECT = ...
PERMANENT_REDIRECT = ...
BAD_REQUEST = ...
UNAUTHORIZED = ...
PAYMENT_REQUIRED = ...
FORBIDDEN = ...
NOT_FOUND = ...
METHOD_NOT_ALLOWED = ...
NOT_ACCEPTABLE = ...
PROXY_AUTHENTICATION_REQUIRED = ...
REQUEST_TIMEOUT = ...
CONFLICT = ...
GONE = ...
LENGTH_REQUIRED = ...
PRECONDITION_FAILED = ...
REQUEST_ENTITY_TOO_LARGE = ...
REQUEST_URI_TOO_LONG = ...
UNSUPPORTED_MEDIA_TYPE = ...
REQUESTED_RANGE_NOT_SATISFIABLE = ...
EXPECTATION_FAILED = ...
UNPROCESSABLE_ENTITY = ...
LOCKED = ...
FAILED_DEPENDENCY = ...
UPGRADE_REQUIRED = ...
PRECONDITION_REQUIRED = ...
TOO_MANY_REQUESTS = ...
REQUEST_HEADER_FIELDS_TOO_LARGE = ...
INTERNAL_SERVER_ERROR = ...
NOT_IMPLEMENTED = ...
BAD_GATEWAY = ...
SERVICE_UNAVAILABLE = ...
GATEWAY_TIMEOUT = ...
HTTP_VERSION_NOT_SUPPORTED = ...
VARIANT_ALSO_NEGOTIATES = ...
INSUFFICIENT_STORAGE = ...
LOOP_DETECTED = ...
NOT_EXTENDED = ...
NETWORK_AUTHENTICATION_REQUIRED = ...
CONTINUE: int
SWITCHING_PROTOCOLS: int
PROCESSING: int
OK: int
CREATED: int
ACCEPTED: int
NON_AUTHORITATIVE_INFORMATION: int
NO_CONTENT: int
RESET_CONTENT: int
PARTIAL_CONTENT: int
MULTI_STATUS: int
ALREADY_REPORTED: int
IM_USED: int
MULTIPLE_CHOICES: int
MOVED_PERMANENTLY: int
FOUND: int
SEE_OTHER: int
NOT_MODIFIED: int
USE_PROXY: int
TEMPORARY_REDIRECT: int
PERMANENT_REDIRECT: int
BAD_REQUEST: int
UNAUTHORIZED: int
PAYMENT_REQUIRED: int
FORBIDDEN: int
NOT_FOUND: int
METHOD_NOT_ALLOWED: int
NOT_ACCEPTABLE: int
PROXY_AUTHENTICATION_REQUIRED: int
REQUEST_TIMEOUT: int
CONFLICT: int
GONE: int
LENGTH_REQUIRED: int
PRECONDITION_FAILED: int
REQUEST_ENTITY_TOO_LARGE: int
REQUEST_URI_TOO_LONG: int
UNSUPPORTED_MEDIA_TYPE: int
REQUESTED_RANGE_NOT_SATISFIABLE: int
EXPECTATION_FAILED: int
UNPROCESSABLE_ENTITY: int
LOCKED: int
FAILED_DEPENDENCY: int
UPGRADE_REQUIRED: int
PRECONDITION_REQUIRED: int
TOO_MANY_REQUESTS: int
REQUEST_HEADER_FIELDS_TOO_LARGE: int
INTERNAL_SERVER_ERROR: int
NOT_IMPLEMENTED: int
BAD_GATEWAY: int
SERVICE_UNAVAILABLE: int
GATEWAY_TIMEOUT: int
HTTP_VERSION_NOT_SUPPORTED: int
VARIANT_ALSO_NEGOTIATES: int
INSUFFICIENT_STORAGE: int
LOOP_DETECTED: int
NOT_EXTENDED: int
NETWORK_AUTHENTICATION_REQUIRED: int

View File

@@ -7,31 +7,31 @@
import sys
from typing import (
List, Iterator, overload, Callable, Tuple, Sequence, Dict,
Generic, AnyStr, Match, Pattern, Any, Optional, Union
List, Iterator, overload, Callable, Tuple,
AnyStr, Match, Pattern, Any, Optional, Union
)
# ----- re variables and constants -----
if sys.version_info >= (3, 6):
import enum
class RegexFlag(enum.IntFlag):
A = 0
ASCII = 0
DEBUG = 0
I = 0
IGNORECASE = 0
L = 0
LOCALE = 0
M = 0
MULTILINE = 0
S = 0
DOTALL = 0
X = 0
VERBOSE = 0
U = 0
UNICODE = 0
T = 0
TEMPLATE = 0
A: int
ASCII: int
DEBUG: int
I: int
IGNORECASE: int
L: int
LOCALE: int
M: int
MULTILINE: int
S: int
DOTALL: int
X: int
VERBOSE: int
U: int
UNICODE: int
T: int
TEMPLATE: int
A = RegexFlag.A
ASCII = RegexFlag.ASCII
@@ -52,23 +52,23 @@ if sys.version_info >= (3, 6):
TEMPLATE = RegexFlag.TEMPLATE
_FlagsType = Union[int, RegexFlag]
else:
A = 0
ASCII = 0
DEBUG = 0
I = 0
IGNORECASE = 0
L = 0
LOCALE = 0
M = 0
MULTILINE = 0
S = 0
DOTALL = 0
X = 0
VERBOSE = 0
U = 0
UNICODE = 0
T = 0
TEMPLATE = 0
A: int
ASCII: int
DEBUG: int
I: int
IGNORECASE: int
L: int
LOCALE: int
M: int
MULTILINE: int
S: int
DOTALL: int
X: int
VERBOSE: int
U: int
UNICODE: int
T: int
TEMPLATE: int
_FlagsType = int
if sys.version_info < (3, 7):

View File

@@ -1,120 +1,118 @@
"""Stub file for the 'signal' module."""
import sys
from enum import IntEnum
from typing import Any, Callable, List, Tuple, Dict, Generic, Union, Optional, Iterable, Set
from typing import Any, Callable, Tuple, Union, Optional, Iterable, Set
from types import FrameType
class ItimerError(IOError): ...
ITIMER_PROF: int = ...
ITIMER_REAL: int = ...
ITIMER_VIRTUAL: int = ...
ITIMER_PROF: int
ITIMER_REAL: int
ITIMER_VIRTUAL: int
NSIG: int = ...
NSIG: int
class Signals(IntEnum):
SIGABRT = ...
SIGALRM = ...
SIGBREAK = ... # Windows
SIGBUS = ...
SIGCHLD = ...
SIGCLD = ...
SIGCONT = ...
SIGEMT = ...
SIGFPE = ...
SIGHUP = ...
SIGILL = ...
SIGINFO = ...
SIGINT = ...
SIGIO = ...
SIGIOT = ...
SIGKILL = ...
SIGPIPE = ...
SIGPOLL = ...
SIGPROF = ...
SIGPWR = ...
SIGQUIT = ...
SIGRTMAX = ...
SIGRTMIN = ...
SIGSEGV = ...
SIGSTOP = ...
SIGSYS = ...
SIGTERM = ...
SIGTRAP = ...
SIGTSTP = ...
SIGTTIN = ...
SIGTTOU = ...
SIGURG = ...
SIGUSR1 = ...
SIGUSR2 = ...
SIGVTALRM = ...
SIGWINCH = ...
SIGXCPU = ...
SIGXFSZ = ...
SIGABRT: int
SIGALRM: int
SIGBREAK: int # Windows
SIGBUS: int
SIGCHLD: int
SIGCLD: int
SIGCONT: int
SIGEMT: int
SIGFPE: int
SIGHUP: int
SIGILL: int
SIGINFO: int
SIGINT: int
SIGIO: int
SIGIOT: int
SIGKILL: int
SIGPIPE: int
SIGPOLL: int
SIGPROF: int
SIGPWR: int
SIGQUIT: int
SIGRTMAX: int
SIGRTMIN: int
SIGSEGV: int
SIGSTOP: int
SIGSYS: int
SIGTERM: int
SIGTRAP: int
SIGTSTP: int
SIGTTIN: int
SIGTTOU: int
SIGURG: int
SIGUSR1: int
SIGUSR2: int
SIGVTALRM: int
SIGWINCH: int
SIGXCPU: int
SIGXFSZ: int
class Handlers(IntEnum):
SIG_DFL = ...
SIG_IGN = ...
SIG_DFL: int
SIG_IGN: int
SIG_DFL = Handlers.SIG_DFL
SIG_IGN = Handlers.SIG_IGN
class Sigmasks(IntEnum):
SIG_BLOCK = ...
SIG_UNBLOCK = ...
SIG_SETMASK = ...
SIG_BLOCK: int
SIG_UNBLOCK: int
SIG_SETMASK: int
SIG_BLOCK = Sigmasks.SIG_BLOCK
SIG_UNBLOCK = Sigmasks.SIG_UNBLOCK
SIG_SETMASK = Sigmasks.SIG_SETMASK
_SIG = Signals
_SIGNUM = Union[int, Signals]
_HANDLER = Union[Callable[[Signals, FrameType], None], int, Handlers, None]
SIGABRT: _SIG = ...
SIGALRM: _SIG = ...
SIGBREAK: _SIG = ... # Windows
SIGBUS: _SIG = ...
SIGCHLD: _SIG = ...
SIGCLD: _SIG = ...
SIGCONT: _SIG = ...
SIGEMT: _SIG = ...
SIGFPE: _SIG = ...
SIGHUP: _SIG = ...
SIGILL: _SIG = ...
SIGINFO: _SIG = ...
SIGINT: _SIG = ...
SIGIO: _SIG = ...
SIGIOT: _SIG = ...
SIGKILL: _SIG = ...
SIGPIPE: _SIG = ...
SIGPOLL: _SIG = ...
SIGPROF: _SIG = ...
SIGPWR: _SIG = ...
SIGQUIT: _SIG = ...
SIGRTMAX: _SIG = ...
SIGRTMIN: _SIG = ...
SIGSEGV: _SIG = ...
SIGSTOP: _SIG = ...
SIGSYS: _SIG = ...
SIGTERM: _SIG = ...
SIGTRAP: _SIG = ...
SIGTSTP: _SIG = ...
SIGTTIN: _SIG = ...
SIGTTOU: _SIG = ...
SIGURG: _SIG = ...
SIGUSR1: _SIG = ...
SIGUSR2: _SIG = ...
SIGVTALRM: _SIG = ...
SIGWINCH: _SIG = ...
SIGXCPU: _SIG = ...
SIGXFSZ: _SIG = ...
SIGABRT: Signals
SIGALRM: Signals
SIGBREAK: Signals # Windows
SIGBUS: Signals
SIGCHLD: Signals
SIGCLD: Signals
SIGCONT: Signals
SIGEMT: Signals
SIGFPE: Signals
SIGHUP: Signals
SIGILL: Signals
SIGINFO: Signals
SIGINT: Signals
SIGIO: Signals
SIGIOT: Signals
SIGKILL: Signals
SIGPIPE: Signals
SIGPOLL: Signals
SIGPROF: Signals
SIGPWR: Signals
SIGQUIT: Signals
SIGRTMAX: Signals
SIGRTMIN: Signals
SIGSEGV: Signals
SIGSTOP: Signals
SIGSYS: Signals
SIGTERM: Signals
SIGTRAP: Signals
SIGTSTP: Signals
SIGTTIN: Signals
SIGTTOU: Signals
SIGURG: Signals
SIGUSR1: Signals
SIGUSR2: Signals
SIGVTALRM: Signals
SIGWINCH: Signals
SIGXCPU: Signals
SIGXFSZ: Signals
# Windows
CTRL_C_EVENT: _SIG = ...
CTRL_BREAK_EVENT: _SIG = ...
CTRL_C_EVENT: int
CTRL_BREAK_EVENT: int
class struct_siginfo(Tuple[int, int, int, int, int, int, int]):
def __init__(self, sequence: Iterable[int]) -> None: ...