diff options
Diffstat (limited to 'Lib/asyncio/tools.py')
-rw-r--r-- | Lib/asyncio/tools.py | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/Lib/asyncio/tools.py b/Lib/asyncio/tools.py index 6c1f725e777..bf1cb5e64cb 100644 --- a/Lib/asyncio/tools.py +++ b/Lib/asyncio/tools.py @@ -5,7 +5,7 @@ from collections import defaultdict from itertools import count from enum import Enum import sys -from _remotedebugging import get_all_awaited_by +from _remote_debugging import get_all_awaited_by class NodeType(Enum): @@ -21,13 +21,21 @@ class CycleFoundException(Exception): # ─── indexing helpers ─────────────────────────────────────────── +def _format_stack_entry(elem: tuple[str, str, int] | str) -> str: + if isinstance(elem, tuple): + fqname, path, line_no = elem + return f"{fqname} {path}:{line_no}" + + return elem + + def _index(result): id2name, awaits = {}, [] for _thr_id, tasks in result: for tid, tname, awaited in tasks: id2name[tid] = tname for stack, parent_id in awaited: - stack = [elem[0] if isinstance(elem, tuple) else elem for elem in stack] + stack = [_format_stack_entry(elem) for elem in stack] awaits.append((parent_id, stack, tid)) return id2name, awaits @@ -106,7 +114,7 @@ def _find_cycles(graph): # ─── PRINT TREE FUNCTION ─────────────────────────────────────── def build_async_tree(result, task_emoji="(T)", cor_emoji=""): """ - Build a list of strings for pretty-print a async call tree. + Build a list of strings for pretty-print an async call tree. The call tree is produced by `get_all_async_stacks()`, prefixing tasks with `task_emoji` and coroutine frames with `cor_emoji`. @@ -169,7 +177,7 @@ def build_task_table(result): return table def _print_cycle_exception(exception: CycleFoundException): - print("ERROR: await-graph contains cycles – cannot print a tree!", file=sys.stderr) + print("ERROR: await-graph contains cycles - cannot print a tree!", file=sys.stderr) print("", file=sys.stderr) for c in exception.cycles: inames = " → ".join(exception.id2name.get(tid, hex(tid)) for tid in c) |