diff --git a/obsws_cli/__about__.py b/obsws_cli/__about__.py index 7608df6..d78f92b 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.16.2" +__version__ = "0.16.3" diff --git a/obsws_cli/app.py b/obsws_cli/app.py index 838929a..b1e0875 100644 --- a/obsws_cli/app.py +++ b/obsws_cli/app.py @@ -56,13 +56,13 @@ def main( help='WebSocket host', show_default='localhost', ), - ] = settings.get('OBS_HOST'), + ] = settings.get('host'), port: Annotated[ int, typer.Option( '--port', '-P', envvar='OBS_PORT', help='WebSocket port', show_default=4455 ), - ] = settings.get('OBS_PORT'), + ] = settings.get('port'), password: Annotated[ str, typer.Option( @@ -72,7 +72,7 @@ def main( help='WebSocket password', show_default='', ), - ] = settings.get('OBS_PASSWORD'), + ] = settings.get('password'), timeout: Annotated[ int, typer.Option( @@ -82,7 +82,7 @@ def main( help='WebSocket timeout', show_default=5, ), - ] = settings.get('OBS_TIMEOUT'), + ] = settings.get('timeout'), version: Annotated[ bool, typer.Option( diff --git a/obsws_cli/settings.py b/obsws_cli/settings.py index d770426..47164a0 100644 --- a/obsws_cli/settings.py +++ b/obsws_cli/settings.py @@ -5,9 +5,22 @@ from pathlib import Path from dotenv import dotenv_values +SettingsValue = str | int + class Settings(UserDict): - """Settings for the OBS WebSocket client.""" + """A class to manage settings for obsws-cli. + + This class extends UserDict to provide a dictionary-like interface for settings. + It loads settings from environment variables and .env files. + The settings are expected to be in uppercase and should start with 'OBS_'. + + Example: + settings = Settings() + host = settings['OBS_HOST'] + settings['OBS_PORT'] = 4455 + + """ def __init__(self, *args, **kwargs): """Initialize the Settings object.""" @@ -19,15 +32,17 @@ class Settings(UserDict): ) super().__init__(*args, **kwargs) - def __getitem__(self, key): + def __getitem__(self, key: str) -> SettingsValue: """Get a setting value by key.""" if not key.startswith('OBS_'): - key = f'OBS_{key.upper()}' - return self.data[key] + key = f'OBS_{key}' + return self.data[key.upper()] - def __setitem__(self, key, value): + def __setitem__(self, key: str, value: SettingsValue): """Set a setting value by key.""" - self.data[key] = value + if not key.startswith('OBS_'): + key = f'OBS_{key}' + self.data[key.upper()] = value _settings = Settings( @@ -35,7 +50,7 @@ _settings = Settings( ) -def get(key: str): +def get(key: str) -> SettingsValue: """Get a setting value by key. Args: