@@ -130,43 +130,6 @@ def render(node, prefix="", last=True, buf=None):
130130 return result
131131
132132
133- def print_async_tree (result , task_emoji = "(T)" , cor_emoji = "" , printer = print ):
134- """
135- Pretty-print the async call tree produced by `get_all_async_stacks()`,
136- coping safely with cycles.
137- """
138- id2name , awaits = _index (result )
139- labels , children = _build_tree (id2name , awaits )
140-
141- def pretty (node ):
142- flag = task_emoji if node [0 ] == NodeType .TASK else cor_emoji
143- return f"{ flag } { labels [node ]} "
144-
145- def render (node , prefix = "" , last = True , buf = None , ancestry = frozenset ()):
146- """
147- DFS renderer that stops if *node* already occurs in *ancestry*
148- (i.e. we just found a cycle).
149- """
150- if buf is None :
151- buf = []
152-
153- if node in ancestry :
154- buf .append (f"{ prefix } { '└── ' if last else '├── ' } ↺ { pretty (node )} (cycle)" )
155- return buf
156-
157- buf .append (f"{ prefix } { '└── ' if last else '├── ' } { pretty (node )} " )
158- new_pref = prefix + (" " if last else "│ " )
159- kids = children .get (node , [])
160- for i , kid in enumerate (kids ):
161- render (kid , new_pref , i == len (kids ) - 1 , buf , ancestry | {node })
162- return buf
163-
164- forest = []
165- for root in _roots (labels , children ):
166- forest .append (render (root ))
167- return forest
168-
169-
170133def build_task_table (result ):
171134 id2name , awaits = _index (result )
172135 table = []
0 commit comments