Compare commits

..

No commits in common. "44527b35e22c61284fc2e7b794b1666524f798fe" and "ab71414d2750070079ff38ca468172cf663c56db" have entirely different histories.

3 changed files with 13 additions and 28 deletions

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2025-present onyx-and-iris <code@onyxandiris.online> # SPDX-FileCopyrightText: 2025-present onyx-and-iris <code@onyxandiris.online>
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
__version__ = "0.16.3" __version__ = "0.16.2"

View File

@ -56,13 +56,13 @@ def main(
help='WebSocket host', help='WebSocket host',
show_default='localhost', show_default='localhost',
), ),
] = settings.get('host'), ] = settings.get('OBS_HOST'),
port: Annotated[ port: Annotated[
int, int,
typer.Option( typer.Option(
'--port', '-P', envvar='OBS_PORT', help='WebSocket port', show_default=4455 '--port', '-P', envvar='OBS_PORT', help='WebSocket port', show_default=4455
), ),
] = settings.get('port'), ] = settings.get('OBS_PORT'),
password: Annotated[ password: Annotated[
str, str,
typer.Option( typer.Option(
@ -70,9 +70,9 @@ def main(
'-p', '-p',
envvar='OBS_PASSWORD', envvar='OBS_PASSWORD',
help='WebSocket password', help='WebSocket password',
show_default=False, show_default='',
), ),
] = settings.get('password'), ] = settings.get('OBS_PASSWORD'),
timeout: Annotated[ timeout: Annotated[
int, int,
typer.Option( typer.Option(
@ -82,7 +82,7 @@ def main(
help='WebSocket timeout', help='WebSocket timeout',
show_default=5, show_default=5,
), ),
] = settings.get('timeout'), ] = settings.get('OBS_TIMEOUT'),
version: Annotated[ version: Annotated[
bool, bool,
typer.Option( typer.Option(

View File

@ -5,22 +5,9 @@ from pathlib import Path
from dotenv import dotenv_values from dotenv import dotenv_values
SettingsValue = str | int
class Settings(UserDict): class Settings(UserDict):
"""A class to manage settings for obsws-cli. """Settings for the OBS WebSocket client."""
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): def __init__(self, *args, **kwargs):
"""Initialize the Settings object.""" """Initialize the Settings object."""
@ -32,17 +19,15 @@ class Settings(UserDict):
) )
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def __getitem__(self, key: str) -> SettingsValue: def __getitem__(self, key):
"""Get a setting value by key.""" """Get a setting value by key."""
if not key.startswith('OBS_'): if not key.startswith('OBS_'):
key = f'OBS_{key}' key = f'OBS_{key.upper()}'
return self.data[key.upper()] return self.data[key]
def __setitem__(self, key: str, value: SettingsValue): def __setitem__(self, key, value):
"""Set a setting value by key.""" """Set a setting value by key."""
if not key.startswith('OBS_'): self.data[key] = value
key = f'OBS_{key}'
self.data[key.upper()] = value
_settings = Settings( _settings = Settings(
@ -50,7 +35,7 @@ _settings = Settings(
) )
def get(key: str) -> SettingsValue: def get(key: str):
"""Get a setting value by key. """Get a setting value by key.
Args: Args: