From c0dc55724f7fbb974d1fd67cea546f8e9882aee4 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Sun, 20 Apr 2025 19:07:46 +0100 Subject: [PATCH] add validation logic to clean up the trace stacks --- obsws_cli/scenecollection.py | 45 +++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/obsws_cli/scenecollection.py b/obsws_cli/scenecollection.py index 92c431f..309f954 100644 --- a/obsws_cli/scenecollection.py +++ b/obsws_cli/scenecollection.py @@ -1,6 +1,5 @@ """module containing commands for manipulating scene collections.""" -import obsws_python as obsws import typer from .alias import AliasGroup @@ -27,9 +26,23 @@ def current(ctx: typer.Context): typer.echo(resp.current_scene_collection_name) +def _scene_collection_in_scene_collections( + ctx: typer.Context, scene_collection_name: str +) -> bool: + """Check if a scene collection exists.""" + resp = ctx.obj['obsws'].get_scene_collection_list() + return any( + collection == scene_collection_name for collection in resp.scene_collections + ) + + @app.command('switch | set') def switch(ctx: typer.Context, scene_collection_name: str): """Switch to a scene collection.""" + if not _scene_collection_in_scene_collections(ctx, scene_collection_name): + typer.echo(f"Scene collection '{scene_collection_name}' not found.", err=True) + raise typer.Exit(code=1) + current_scene_collection = ( ctx.obj['obsws'].get_scene_collection_list().current_scene_collection_name ) @@ -39,28 +52,18 @@ def switch(ctx: typer.Context, scene_collection_name: str): ) raise typer.Exit(code=1) - try: - ctx.obj['obsws'].set_current_scene_collection(scene_collection_name) - typer.echo(f'Switched to scene collection {scene_collection_name}') - except obsws.error.OBSSDKRequestError as e: - if e.code == 600: - typer.echo( - f'Scene collection "{scene_collection_name}" does not exist.', - err=True, - ) - raise typer.Exit(code=e.code) + ctx.obj['obsws'].set_current_scene_collection(scene_collection_name) + typer.echo(f"Switched to scene collection '{scene_collection_name}'") @app.command('create | new') def create(ctx: typer.Context, scene_collection_name: str): """Create a new scene collection.""" - try: - ctx.obj['obsws'].create_scene_collection(scene_collection_name) - typer.echo(f'Created scene collection {scene_collection_name}') - except obsws.error.OBSSDKRequestError as e: - if e.code == 601: - typer.echo( - f'Scene collection "{scene_collection_name}" already exists.', - err=True, - ) - raise typer.Exit(code=e.code) + if _scene_collection_in_scene_collections(ctx, scene_collection_name): + typer.echo( + f"Scene collection '{scene_collection_name}' already exists.", err=True + ) + raise typer.Exit(code=1) + + ctx.obj['obsws'].create_scene_collection(scene_collection_name) + typer.echo(f'Created scene collection {scene_collection_name}')