Skip to content
This repository has been archived by the owner on Dec 27, 2021. It is now read-only.

Commit

Permalink
threading: fix ExceptHookArgs being a function instead of a type (pyt…
Browse files Browse the repository at this point in the history
…hon#4768)

The previous typing meant `threading.ExceptHookArgs` could not be used
to type a value.

The new typing follows what cpython does in the happy path (`_thread`
exists rather than the pure-python fallback being used).

Fixes python#4767.
  • Loading branch information
bluetech authored Nov 14, 2020
1 parent 8c20938 commit 27a45df
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 26 deletions.
8 changes: 1 addition & 7 deletions stdlib/2and3/_dummy_threading.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -155,13 +155,7 @@ class Event:
def wait(self, timeout: Optional[float] = ...) -> bool: ...

if sys.version_info >= (3, 8):
import _thread

# don't ask...
_ExceptHookArgs = _thread.ExceptHookArgs
ExceptHookArgs = _thread._ExceptHookArgs

excepthook: Callable[[_ExceptHookArgs], Any]
from _thread import _excepthook as excepthook, _ExceptHookArgs as ExceptHookArgs

class Timer(Thread):
if sys.version_info >= (3,):
Expand Down
8 changes: 1 addition & 7 deletions stdlib/2and3/threading.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -155,13 +155,7 @@ class Event:
def wait(self, timeout: Optional[float] = ...) -> bool: ...

if sys.version_info >= (3, 8):
import _thread

# don't ask...
_ExceptHookArgs = _thread.ExceptHookArgs
ExceptHookArgs = _thread._ExceptHookArgs

excepthook: Callable[[_ExceptHookArgs], Any]
from _thread import _excepthook as excepthook, _ExceptHookArgs as ExceptHookArgs

class Timer(Thread):
if sys.version_info >= (3,):
Expand Down
19 changes: 11 additions & 8 deletions stdlib/3/_thread.pyi
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import sys
from threading import Thread
from types import TracebackType
from typing import Any, Callable, Dict, NamedTuple, NoReturn, Optional, Tuple, Type
from typing import Any, Callable, Dict, NoReturn, Optional, Tuple, Type

error = RuntimeError

Expand Down Expand Up @@ -29,10 +29,13 @@ TIMEOUT_MAX: float

if sys.version_info >= (3, 8):
def get_native_id() -> int: ... # only available on some platforms
class ExceptHookArgs(NamedTuple):
exc_type: Type[BaseException]
exc_value: Optional[BaseException]
exc_traceback: Optional[TracebackType]
thread: Optional[Thread]
def _ExceptHookArgs(args: Any) -> ExceptHookArgs: ...
_excepthook: Callable[[ExceptHookArgs], Any]
class _ExceptHookArgs(Tuple[Type[BaseException], Optional[BaseException], Optional[TracebackType], Optional[Thread]]):
@property
def exc_type(self) -> Type[BaseException]: ...
@property
def exc_value(self) -> Optional[BaseException]: ...
@property
def exc_traceback(self) -> Optional[TracebackType]: ...
@property
def thread(self) -> Optional[Thread]: ...
_excepthook: Callable[[_ExceptHookArgs], Any]
2 changes: 0 additions & 2 deletions tests/stubtest_whitelists/py38.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
_thread.ExceptHookArgs
_thread._ExceptHookArgs
ast.Bytes.__new__
ast.Ellipsis.__new__
ast.NameConstant.__new__
Expand Down
2 changes: 0 additions & 2 deletions tests/stubtest_whitelists/py39.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
_ast.ImportFrom.level
_dummy_thread
_thread.ExceptHookArgs
_thread._ExceptHookArgs
ast.Bytes.__new__
ast.Ellipsis.__new__
ast.ExtSlice.__new__
Expand Down

0 comments on commit 27a45df

Please sign in to comment.