feat: group multi-browser output by source
Testing / remote-protocol-compat (0.9.3) (push) Successful in 52s
Testing / test (push) Successful in 1m2s
Testing / remote-protocol-compat (0.9.5) (push) Successful in 1m0s
Package Extension / package-extension (push) Successful in 1m11s
Build & Publish Package / publish (push) Successful in 1m7s
Testing / remote-protocol-compat (0.9.3) (push) Successful in 52s
Testing / test (push) Successful in 1m2s
Testing / remote-protocol-compat (0.9.5) (push) Successful in 1m0s
Package Extension / package-extension (push) Successful in 1m11s
Build & Publish Package / publish (push) Successful in 1m7s
- Add browser source grouping metadata to SDK-created tabs, groups, list results, and aggregate count results. - Render grouped local/remote browser tables consistently for clients, tabs, groups, windows, sessions, and remote status output. - Document remote control, auth, HTTP gateway usage, and the refreshed project structure in the README. - Add coverage for grouped output and BrowserCounts browser_groups. - Bump the Python package, extension manifest, and lockfile to 0.15.6. - Add a just publish helper for building and publishing release artifacts.
This commit is contained in:
@@ -82,3 +82,56 @@ def print_table_rows(
|
||||
for row in rows:
|
||||
table.add_row(*[text_value(getter(row)) for _header, getter in columns])
|
||||
Console(width=terminal_width(console)).print(table)
|
||||
|
||||
def print_browser_grouped_table_rows(
|
||||
rows: Sequence[Row],
|
||||
columns: Sequence[Column],
|
||||
*,
|
||||
console: Console,
|
||||
empty_message: str,
|
||||
browser_getter: Callable[[Row], CellValue | None] = lambda row: item_value(row, "browser"),
|
||||
group_getter: Callable[[Row], CellValue | None] = lambda row: item_value(row, "browser_group", item_value(row, "browserGroup")),
|
||||
browser_header: str = "Browser",
|
||||
show_header: bool = True,
|
||||
header_style: str = "bold cyan",
|
||||
) -> None:
|
||||
"""Render rows with optional local/remote browser grouping.
|
||||
|
||||
Rows without a browser label are rendered as a normal table. Rows with
|
||||
``browser_group``/``browserGroup`` get a group header (for example ``local``
|
||||
or a remote host) and a short indented profile label below it.
|
||||
"""
|
||||
if not rows:
|
||||
console.print(empty_message)
|
||||
return
|
||||
|
||||
show_browser = any(bool(browser_getter(row)) for row in rows)
|
||||
if not show_browser:
|
||||
print_table_rows(
|
||||
rows,
|
||||
columns,
|
||||
console=console,
|
||||
empty_message=empty_message,
|
||||
show_header=show_header,
|
||||
header_style=header_style,
|
||||
)
|
||||
return
|
||||
|
||||
table = Table(show_header=show_header, header_style=header_style)
|
||||
table.add_column(browser_header, no_wrap=True)
|
||||
for header, _getter in columns:
|
||||
table.add_column(header)
|
||||
|
||||
rendered_groups: set[str] = set()
|
||||
for row in rows:
|
||||
browser = text_value(browser_getter(row))
|
||||
group = text_value(group_getter(row))
|
||||
if group:
|
||||
if group not in rendered_groups:
|
||||
table.add_row(f"[bold]{group}[/bold]", *["" for _header, _getter in columns])
|
||||
rendered_groups.add(group)
|
||||
browser = browser.removeprefix(f"{group}:")
|
||||
browser = f" {browser}"
|
||||
table.add_row(browser, *[text_value(getter(row)) for _header, getter in columns])
|
||||
|
||||
Console(width=terminal_width(console)).print(table)
|
||||
|
||||
Reference in New Issue
Block a user