From 5189ee1d5b5053599793dd2d4574052b846e7836 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Fri, 23 May 2025 22:37:22 +0100 Subject: [PATCH] print profile list as rich table patch bump --- obsws_cli/__about__.py | 2 +- obsws_cli/profile.py | 36 +++++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/obsws_cli/__about__.py b/obsws_cli/__about__.py index 6f92465..2a584f3 100644 --- a/obsws_cli/__about__.py +++ b/obsws_cli/__about__.py @@ -1,4 +1,4 @@ # SPDX-FileCopyrightText: 2025-present onyx-and-iris # # SPDX-License-Identifier: MIT -__version__ = "0.12.3" +__version__ = "0.12.4" diff --git a/obsws_cli/profile.py b/obsws_cli/profile.py index 9a6278a..5da0cff 100644 --- a/obsws_cli/profile.py +++ b/obsws_cli/profile.py @@ -1,11 +1,15 @@ """module containing commands for manipulating profiles in OBS.""" import typer +from rich.console import Console +from rich.table import Table from . import validate from .alias import AliasGroup app = typer.Typer(cls=AliasGroup) +out_console = Console() +err_console = Console(stderr=True) @app.callback() @@ -17,52 +21,62 @@ def main(): def list(ctx: typer.Context): """List profiles.""" resp = ctx.obj.get_profile_list() + + table = Table(title='Profiles') + for column in ('Name', 'Current'): + table.add_column( + column, justify='left' if column == 'Name' else 'center', style='cyan' + ) + for profile in resp.profiles: - typer.echo(profile) + table.add_row( + profile, + ':heavy_check_mark:' if profile == resp.current_profile_name else '', + ) + + out_console.print(table) @app.command('current | get') def current(ctx: typer.Context): """Get the current profile.""" resp = ctx.obj.get_profile_list() - typer.echo(resp.current_profile_name) + out_console.print(resp.current_profile_name) @app.command('switch | set') def switch(ctx: typer.Context, profile_name: str): """Switch to a profile.""" if not validate.profile_exists(ctx, profile_name): - typer.echo(f"Profile '{profile_name}' not found.", err=True) + err_console.print(f"Profile '{profile_name}' not found.") raise typer.Exit(1) resp = ctx.obj.get_profile_list() if resp.current_profile_name == profile_name: - typer.echo( - f"Profile '{profile_name}' is already the current profile.", err=True - ) + err_console.print(f"Profile '{profile_name}' is already the current profile.") raise typer.Exit(1) ctx.obj.set_current_profile(profile_name) - typer.echo(f"Switched to profile '{profile_name}'.") + out_console.print(f"Switched to profile '{profile_name}'.") @app.command('create | new') def create(ctx: typer.Context, profile_name: str): """Create a new profile.""" if validate.profile_exists(ctx, profile_name): - typer.echo(f"Profile '{profile_name}' already exists.", err=True) + err_console.print(f"Profile '{profile_name}' already exists.") raise typer.Exit(1) ctx.obj.create_profile(profile_name) - typer.echo(f"Created profile '{profile_name}'.") + out_console.print(f"Created profile '{profile_name}'.") @app.command('remove | rm') def remove(ctx: typer.Context, profile_name: str): """Remove a profile.""" if not validate.profile_exists(ctx, profile_name): - typer.echo(f"Profile '{profile_name}' not found.", err=True) + err_console.print(f"Profile '{profile_name}' not found.") raise typer.Exit(1) ctx.obj.remove_profile(profile_name) - typer.echo(f"Removed profile '{profile_name}'.") + out_console.print(f"Removed profile '{profile_name}'.")