FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cpython/Lib/_pyrepl/_threading_handler.py at 3.15 · python/cpython · GitHub
python
cpython
Repository navigation
Code
Issues
5k+
(5k+)
Pull requests
2.7k
(2.7k)
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cpython
/
Lib
/
_pyrepl
/
_threading_handler.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
74 lines (59 loc) · 2.12 KB
Breadcrumbs
cpython
/
Lib
/
_pyrepl
/
_threading_handler.py
Copy path
File metadata and controls
74 lines (59 loc) · 2.12 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from
__future__
import
annotations
from
dataclasses
import
dataclass
,
field
import
traceback
TYPE_CHECKING
=
False
if
TYPE_CHECKING
:
from
threading
import
Thread
from
types
import
TracebackType
from
typing
import
Protocol
class
ExceptHookArgs
(
Protocol
):
@
property
def
exc_type
(
self
)
->
type
[
BaseException
]: ...
@
property
def
exc_value
(
self
)
->
BaseException
|
None
: ...
@
property
def
exc_traceback
(
self
)
->
TracebackType
|
None
: ...
@
property
def
thread
(
self
)
->
Thread
|
None
: ...
class
ShowExceptions
(
Protocol
):
def
__call__
(
self
)
->
int
: ...
def
add
(
self
,
s
:
str
)
->
None
: ...
from
.
reader
import
Reader
def
install_threading_hook
(
reader
:
Reader
)
->
None
:
import
threading
@
dataclass
class
ExceptHookHandler
:
lock
:
threading
.
Lock
=
field
(
default_factory
=
threading
.
Lock
)
messages
:
list
[
str
]
=
field
(
default_factory
=
list
)
def
show
(
self
)
->
int
:
count
=
0
with
self
.
lock
:
if
not
self
.
messages
:
return
0
reader
.
restore
()
for
tb
in
self
.
messages
:
count
+=
1
if
tb
:
print
(
tb
)
self
.
messages
.
clear
()
reader
.
scheduled_commands
.
append
(
"ctrl-c"
)
reader
.
prepare
()
return
count
def
add
(
self
,
s
:
str
)
->
None
:
with
self
.
lock
:
self
.
messages
.
append
(
s
)
def
exception
(
self
,
args
:
ExceptHookArgs
)
->
None
:
lines
=
traceback
.
format_exception
(
args
.
exc_type
,
args
.
exc_value
,
args
.
exc_traceback
,
colorize
=
reader
.
can_colorize
,
)
# type: ignore[call-overload]
pre
=
f"
\n
Exception in
{
args
.
thread
.
name
}
:
\n
"
if
args
.
thread
else
"
\n
"
tb
=
pre
+
""
.
join
(
lines
)
self
.
add
(
tb
)
def
__call__
(
self
)
->
int
:
return
self
.
show
()
handler
=
ExceptHookHandler
()
reader
.
threading_hook
=
handler
threading
.
excepthook
=
handler
.
exception
Back
|
FazBrowse Home
|
New Git URL