|
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