__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
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"\nException 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
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| __init__.py | File | 925 B | 0644 |
|
| __main__.py | File | 263 B | 0644 |
|
| _minimal_curses.py | File | 1.8 KB | 0644 |
|
| _threading_handler.py | File | 2.12 KB | 0644 |
|
| commands.py | File | 11.91 KB | 0644 |
|
| completing_reader.py | File | 9.81 KB | 0644 |
|
| console.py | File | 6.71 KB | 0644 |
|
| curses.py | File | 1.21 KB | 0644 |
|
| fancy_termios.py | File | 2.11 KB | 0644 |
|
| historical_reader.py | File | 12.93 KB | 0644 |
|
| input.py | File | 3.69 KB | 0644 |
|
| keymap.py | File | 6.31 KB | 0644 |
|
| main.py | File | 1.89 KB | 0644 |
|
| mypy.ini | File | 870 B | 0644 |
|
| pager.py | File | 5.68 KB | 0644 |
|
| reader.py | File | 27.06 KB | 0644 |
|
| readline.py | File | 19.75 KB | 0644 |
|
| simple_interact.py | File | 5.15 KB | 0644 |
|
| trace.py | File | 433 B | 0644 |
|
| types.py | File | 354 B | 0644 |
|
| unix_console.py | File | 24.88 KB | 0644 |
|
| unix_eventqueue.py | File | 4.92 KB | 0644 |
|
| utils.py | File | 2.18 KB | 0644 |
|
| windows_console.py | File | 19.05 KB | 0644 |
|