From 1fc0bef23724e8960f7443f822c7931aa0bfaa23 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Sat, 24 Jan 2026 22:29:33 +0000 Subject: [PATCH] dynamically load commands from obsws_cli.commands no changes to files other than imports patch bump --- obsws_cli/__about__.py | 2 +- obsws_cli/app.py | 28 +++++---------------- obsws_cli/{ => commands}/filter.py | 4 +-- obsws_cli/{ => commands}/group.py | 6 ++--- obsws_cli/{ => commands}/hotkey.py | 4 +-- obsws_cli/{ => commands}/input.py | 4 +-- obsws_cli/{ => commands}/media.py | 4 +-- obsws_cli/{ => commands}/profile.py | 4 +-- obsws_cli/{ => commands}/projector.py | 4 +-- obsws_cli/{ => commands}/record.py | 4 +-- obsws_cli/{ => commands}/replaybuffer.py | 4 +-- obsws_cli/{ => commands}/scene.py | 4 +-- obsws_cli/{ => commands}/scenecollection.py | 4 +-- obsws_cli/{ => commands}/sceneitem.py | 4 +-- obsws_cli/{ => commands}/screenshot.py | 4 +-- obsws_cli/{ => commands}/settings.py | 4 +-- obsws_cli/{ => commands}/stream.py | 4 +-- obsws_cli/{ => commands}/studiomode.py | 4 +-- obsws_cli/{ => commands}/text.py | 4 +-- obsws_cli/{ => commands}/virtualcam.py | 4 +-- 20 files changed, 44 insertions(+), 60 deletions(-) rename obsws_cli/{ => commands}/filter.py (98%) rename obsws_cli/{ => commands}/group.py (97%) rename obsws_cli/{ => commands}/hotkey.py (96%) rename obsws_cli/{ => commands}/input.py (99%) rename obsws_cli/{ => commands}/media.py (96%) rename obsws_cli/{ => commands}/profile.py (97%) rename obsws_cli/{ => commands}/projector.py (96%) rename obsws_cli/{ => commands}/record.py (98%) rename obsws_cli/{ => commands}/replaybuffer.py (95%) rename obsws_cli/{ => commands}/scene.py (97%) rename obsws_cli/{ => commands}/scenecollection.py (96%) rename obsws_cli/{ => commands}/sceneitem.py (99%) rename obsws_cli/{ => commands}/screenshot.py (96%) rename obsws_cli/{ => commands}/settings.py (99%) rename obsws_cli/{ => commands}/stream.py (96%) rename obsws_cli/{ => commands}/studiomode.py (94%) rename obsws_cli/{ => commands}/text.py (95%) rename obsws_cli/{ => commands}/virtualcam.py (93%) diff --git a/obsws_cli/__about__.py b/obsws_cli/__about__.py index d02145c..4332135 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.24.4' +__version__ = '0.24.5' diff --git a/obsws_cli/app.py b/obsws_cli/app.py index 99b7d4e..d623ba4 100644 --- a/obsws_cli/app.py +++ b/obsws_cli/app.py @@ -2,6 +2,7 @@ import importlib import logging +import pkgutil from typing import Annotated import obsws_python as obsws @@ -9,32 +10,15 @@ import typer from obsws_cli.__about__ import __version__ as version -from . import config, console, styles +from . import commands, config, console, styles from .alias import RootTyperAliasGroup app = typer.Typer(cls=RootTyperAliasGroup) -for sub_typer in ( - 'filter', - 'group', - 'hotkey', - 'input', - 'media', - 'profile', - 'projector', - 'record', - 'replaybuffer', - 'scene', - 'scenecollection', - 'sceneitem', - 'screenshot', - 'settings', - 'stream', - 'studiomode', - 'text', - 'virtualcam', +for importer, modname, ispkg in pkgutil.iter_modules( + commands.__path__, commands.__name__ + '.' ): - module = importlib.import_module(f'.{sub_typer}', package=__package__) - app.add_typer(module.app, name=sub_typer) + subtyper = importlib.import_module(modname) + app.add_typer(subtyper.app, name=modname.split('.')[-1]) def version_callback(value: bool): diff --git a/obsws_cli/filter.py b/obsws_cli/commands/filter.py similarity index 98% rename from obsws_cli/filter.py rename to obsws_cli/commands/filter.py index 470be77..dfcc983 100644 --- a/obsws_cli/filter.py +++ b/obsws_cli/commands/filter.py @@ -7,8 +7,8 @@ import typer from rich.table import Table from rich.text import Text -from . import console, util -from .alias import SubTyperAliasGroup +from obsws_cli import console, util +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/group.py b/obsws_cli/commands/group.py similarity index 97% rename from obsws_cli/group.py rename to obsws_cli/commands/group.py index f83ef3a..b50e7bc 100644 --- a/obsws_cli/group.py +++ b/obsws_cli/commands/group.py @@ -6,9 +6,9 @@ import typer from rich.table import Table from rich.text import Text -from . import console, util, validate -from .alias import SubTyperAliasGroup -from .protocols import DataclassProtocol +from obsws_cli import console, util, validate +from obsws_cli.alias import SubTyperAliasGroup +from obsws_cli.protocols import DataclassProtocol app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/hotkey.py b/obsws_cli/commands/hotkey.py similarity index 96% rename from obsws_cli/hotkey.py rename to obsws_cli/commands/hotkey.py index 57c6591..64231f4 100644 --- a/obsws_cli/hotkey.py +++ b/obsws_cli/commands/hotkey.py @@ -6,8 +6,8 @@ import typer from rich.table import Table from rich.text import Text -from . import console -from .alias import SubTyperAliasGroup +from obsws_cli import console +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/input.py b/obsws_cli/commands/input.py similarity index 99% rename from obsws_cli/input.py rename to obsws_cli/commands/input.py index 63a63ba..5ccc7bd 100644 --- a/obsws_cli/input.py +++ b/obsws_cli/commands/input.py @@ -7,8 +7,8 @@ import typer from rich.table import Table from rich.text import Text -from . import console, util, validate -from .alias import SubTyperAliasGroup +from obsws_cli import console, util, validate +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/media.py b/obsws_cli/commands/media.py similarity index 96% rename from obsws_cli/media.py rename to obsws_cli/commands/media.py index d53c11a..50bf641 100644 --- a/obsws_cli/media.py +++ b/obsws_cli/commands/media.py @@ -4,8 +4,8 @@ from typing import Annotated, Optional import typer -from . import console, util, validate -from .alias import SubTyperAliasGroup +from obsws_cli import console, util, validate +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/profile.py b/obsws_cli/commands/profile.py similarity index 97% rename from obsws_cli/profile.py rename to obsws_cli/commands/profile.py index 1b7ee81..de25153 100644 --- a/obsws_cli/profile.py +++ b/obsws_cli/commands/profile.py @@ -6,8 +6,8 @@ import typer from rich.table import Table from rich.text import Text -from . import console, util, validate -from .alias import SubTyperAliasGroup +from obsws_cli import console, util, validate +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/projector.py b/obsws_cli/commands/projector.py similarity index 96% rename from obsws_cli/projector.py rename to obsws_cli/commands/projector.py index 9eecd53..050c7c1 100644 --- a/obsws_cli/projector.py +++ b/obsws_cli/commands/projector.py @@ -6,8 +6,8 @@ import typer from rich.table import Table from rich.text import Text -from . import console -from .alias import SubTyperAliasGroup +from obsws_cli import console +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/record.py b/obsws_cli/commands/record.py similarity index 98% rename from obsws_cli/record.py rename to obsws_cli/commands/record.py index 8915d10..a81645a 100644 --- a/obsws_cli/record.py +++ b/obsws_cli/commands/record.py @@ -5,8 +5,8 @@ from typing import Annotated, Optional import typer -from . import console -from .alias import SubTyperAliasGroup +from obsws_cli import console +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/replaybuffer.py b/obsws_cli/commands/replaybuffer.py similarity index 95% rename from obsws_cli/replaybuffer.py rename to obsws_cli/commands/replaybuffer.py index ad2dc5c..b0cc1a9 100644 --- a/obsws_cli/replaybuffer.py +++ b/obsws_cli/commands/replaybuffer.py @@ -2,8 +2,8 @@ import typer -from . import console -from .alias import SubTyperAliasGroup +from obsws_cli import console +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/scene.py b/obsws_cli/commands/scene.py similarity index 97% rename from obsws_cli/scene.py rename to obsws_cli/commands/scene.py index 6e6979e..8d16ee9 100644 --- a/obsws_cli/scene.py +++ b/obsws_cli/commands/scene.py @@ -6,8 +6,8 @@ import typer from rich.table import Table from rich.text import Text -from . import console, util, validate -from .alias import SubTyperAliasGroup +from obsws_cli import console, util, validate +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/scenecollection.py b/obsws_cli/commands/scenecollection.py similarity index 96% rename from obsws_cli/scenecollection.py rename to obsws_cli/commands/scenecollection.py index 1792a42..838a1ba 100644 --- a/obsws_cli/scenecollection.py +++ b/obsws_cli/commands/scenecollection.py @@ -5,8 +5,8 @@ from typing import Annotated import typer from rich.table import Table -from . import console, validate -from .alias import SubTyperAliasGroup +from obsws_cli import console, validate +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/sceneitem.py b/obsws_cli/commands/sceneitem.py similarity index 99% rename from obsws_cli/sceneitem.py rename to obsws_cli/commands/sceneitem.py index 29a2db7..bf59421 100644 --- a/obsws_cli/sceneitem.py +++ b/obsws_cli/commands/sceneitem.py @@ -5,8 +5,8 @@ from typing import Annotated, Optional import typer from rich.table import Table -from . import console, util, validate -from .alias import SubTyperAliasGroup +from obsws_cli import console, util, validate +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/screenshot.py b/obsws_cli/commands/screenshot.py similarity index 96% rename from obsws_cli/screenshot.py rename to obsws_cli/commands/screenshot.py index 6ee953f..6219053 100644 --- a/obsws_cli/screenshot.py +++ b/obsws_cli/commands/screenshot.py @@ -6,8 +6,8 @@ from typing import Annotated import obsws_python as obsws import typer -from . import console -from .alias import SubTyperAliasGroup +from obsws_cli import console +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/settings.py b/obsws_cli/commands/settings.py similarity index 99% rename from obsws_cli/settings.py rename to obsws_cli/commands/settings.py index 8ac483d..e2936e2 100644 --- a/obsws_cli/settings.py +++ b/obsws_cli/commands/settings.py @@ -6,8 +6,8 @@ import typer from rich.table import Table from rich.text import Text -from . import console, util -from .alias import SubTyperAliasGroup +from obsws_cli import console, util +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/stream.py b/obsws_cli/commands/stream.py similarity index 96% rename from obsws_cli/stream.py rename to obsws_cli/commands/stream.py index 854051a..567cf91 100644 --- a/obsws_cli/stream.py +++ b/obsws_cli/commands/stream.py @@ -2,8 +2,8 @@ import typer -from . import console -from .alias import SubTyperAliasGroup +from obsws_cli import console +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/studiomode.py b/obsws_cli/commands/studiomode.py similarity index 94% rename from obsws_cli/studiomode.py rename to obsws_cli/commands/studiomode.py index 449bd0c..54a2f66 100644 --- a/obsws_cli/studiomode.py +++ b/obsws_cli/commands/studiomode.py @@ -2,8 +2,8 @@ import typer -from . import console -from .alias import SubTyperAliasGroup +from obsws_cli import console +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/text.py b/obsws_cli/commands/text.py similarity index 95% rename from obsws_cli/text.py rename to obsws_cli/commands/text.py index 9484a0d..0d715dc 100644 --- a/obsws_cli/text.py +++ b/obsws_cli/commands/text.py @@ -4,8 +4,8 @@ from typing import Annotated, Optional import typer -from . import console, validate -from .alias import SubTyperAliasGroup +from obsws_cli import console, validate +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup) diff --git a/obsws_cli/virtualcam.py b/obsws_cli/commands/virtualcam.py similarity index 93% rename from obsws_cli/virtualcam.py rename to obsws_cli/commands/virtualcam.py index dc739c1..01878ab 100644 --- a/obsws_cli/virtualcam.py +++ b/obsws_cli/commands/virtualcam.py @@ -2,8 +2,8 @@ import typer -from . import console -from .alias import SubTyperAliasGroup +from obsws_cli import console +from obsws_cli.alias import SubTyperAliasGroup app = typer.Typer(cls=SubTyperAliasGroup)