| 
6 | 6 | from enum import Enum  | 
7 | 7 | import sys  | 
8 | 8 | from _remote_debugging import get_all_awaited_by  | 
 | 9 | +import csv  | 
9 | 10 | 
 
  | 
10 | 11 | 
 
  | 
11 | 12 | class NodeType(Enum):  | 
@@ -200,20 +201,45 @@ def _get_awaited_by_tasks(pid: int) -> list:  | 
200 | 201 |         sys.exit(1)  | 
201 | 202 | 
 
  | 
202 | 203 | 
 
  | 
203 |  | -def display_awaited_by_tasks_table(pid: int) -> None:  | 
 | 204 | +class TaskTableOutputFormat(Enum):  | 
 | 205 | +    table = "table"  | 
 | 206 | +    csv = "csv"  | 
 | 207 | +    bsv = "bsv"  | 
 | 208 | + | 
 | 209 | + | 
 | 210 | +_header = ('tid', 'task id', 'task name', 'coroutine chain', 'awaiter name', 'awaiter id')  | 
 | 211 | + | 
 | 212 | + | 
 | 213 | +def display_awaited_by_tasks_table(pid: int, format_: TaskTableOutputFormat = TaskTableOutputFormat.table) -> None:  | 
204 | 214 |     """Build and print a table of all pending tasks under `pid`."""  | 
205 | 215 | 
 
  | 
206 | 216 |     tasks = _get_awaited_by_tasks(pid)  | 
207 | 217 |     table = build_task_table(tasks)  | 
 | 218 | +    if format_ != TaskTableOutputFormat.table:  | 
 | 219 | +        _display_awaited_by_tasks_csv(table, format_)  | 
 | 220 | +        return  | 
208 | 221 |     # Print the table in a simple tabular format  | 
209 | 222 |     print(  | 
210 |  | -        f"{'tid':<10} {'task id':<20} {'task name':<20} {'coroutine chain':<50} {'awaiter name':<20} {'awaiter id':<15}"  | 
 | 223 | +        f"{_header[0]:<10} {_header[1]:<20} {_header[2]:<20} {_header[3]:<50} {_header[4]:<20} {_header[5]:<15}"  | 
211 | 224 |     )  | 
212 | 225 |     print("-" * 135)  | 
213 | 226 |     for row in table:  | 
214 | 227 |         print(f"{row[0]:<10} {row[1]:<20} {row[2]:<20} {row[3]:<50} {row[4]:<20} {row[5]:<15}")  | 
215 | 228 | 
 
  | 
216 | 229 | 
 
  | 
 | 230 | +def _display_awaited_by_tasks_csv(table, format_: TaskTableOutputFormat) -> None:  | 
 | 231 | +    match format_:  | 
 | 232 | +        case TaskTableOutputFormat.csv:  | 
 | 233 | +            delimiter = ','  | 
 | 234 | +        case TaskTableOutputFormat.bsv:  | 
 | 235 | +            delimiter = '🍌'  | 
 | 236 | +        case _:  | 
 | 237 | +            raise ValueError(f"Unknown output format: {format_}")  | 
 | 238 | +    csv_writer = csv.writer(sys.stdout, delimiter=delimiter)  | 
 | 239 | +    csv_writer.writerow(_header)  | 
 | 240 | +    csv_writer.writerows(table)  | 
 | 241 | + | 
 | 242 | + | 
217 | 243 | def display_awaited_by_tasks_tree(pid: int) -> None:  | 
218 | 244 |     """Build and print a tree of all pending tasks under `pid`."""  | 
219 | 245 | 
 
  | 
 | 
0 commit comments