From fe9f305afe1e99c2e50b003f688c9f7b884eaa87 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Fri, 27 Mar 2026 16:29:16 +0000 Subject: [PATCH] update examples to work with modified req client examples now expect env variables --- examples/events/__main__.py | 22 ++++++++++++++-------- examples/hotkeys/__main__.py | 17 +++++++++++------ examples/levels/__main__.py | 10 +++++++++- examples/scene_rotate/__main__.py | 9 +++++++-- pyproject.toml | 23 ++++++++++++++--------- tests/__init__.py | 6 +++--- tests/test_error.py | 8 ++++---- 7 files changed, 62 insertions(+), 33 deletions(-) diff --git a/examples/events/__main__.py b/examples/events/__main__.py index e5e14f7..56858ab 100644 --- a/examples/events/__main__.py +++ b/examples/events/__main__.py @@ -1,11 +1,13 @@ -import time +import os +from threading import Event import obsws_python as obs class Observer: - def __init__(self): - self._client = obs.EventClient() + def __init__(self, host, port, password, stop_event): + self._client = obs.EventClient(host=host, port=port, password=password) + self._stop_event = stop_event self._client.callback.register( [ self.on_current_program_scene_changed, @@ -15,7 +17,6 @@ class Observer: ] ) print(f"Registered events: {self._client.callback.get()}") - self.running = True def __enter__(self): return self @@ -38,10 +39,15 @@ class Observer: def on_exit_started(self, _): """OBS has begun the shutdown process.""" print("OBS closing!") - self.running = False + self._stop_event.set() if __name__ == "__main__": - with Observer() as observer: - while observer.running: - time.sleep(0.1) + host = os.getenv("OBSWS_HOST", "localhost") + port = int(os.getenv("OBSWS_PORT", 4455)) + password = os.getenv("OBSWS_PASSWORD", "") + + stop_event = Event() + + with Observer(host, port, password, stop_event) as observer: + stop_event.wait() diff --git a/examples/hotkeys/__main__.py b/examples/hotkeys/__main__.py index efc5803..96989ae 100644 --- a/examples/hotkeys/__main__.py +++ b/examples/hotkeys/__main__.py @@ -1,13 +1,14 @@ import inspect +import os -import keyboard +import keyboard # type: ignore import obsws_python as obs class Observer: - def __init__(self): - self._client = obs.EventClient() + def __init__(self, host, port, password): + self._client = obs.EventClient(host=host, port=port, password=password) self._client.callback.register(self.on_current_program_scene_changed) print(f"Registered events: {self._client.callback.get()}") @@ -34,12 +35,16 @@ def version(): def set_scene(scene, *args): - req_client.set_current_program_scene(scene) + req_client.set_current_program_scene(scene_name=scene) if __name__ == "__main__": - with obs.ReqClient() as req_client: - with Observer() as observer: + host = os.getenv("OBSWS_HOST", "localhost") + port = int(os.getenv("OBSWS_PORT", 4455)) + password = os.getenv("OBSWS_PASSWORD", "") + + with obs.ReqClient(host=host, port=port, password=password) as req_client: + with Observer(host, port, password) as observer: keyboard.add_hotkey("0", version) keyboard.add_hotkey("1", set_scene, args=("START",)) keyboard.add_hotkey("2", set_scene, args=("BRB",)) diff --git a/examples/levels/__main__.py b/examples/levels/__main__.py index 2fc2a03..fb85d8c 100644 --- a/examples/levels/__main__.py +++ b/examples/levels/__main__.py @@ -1,3 +1,4 @@ +import os from enum import IntEnum from math import log @@ -34,8 +35,15 @@ def on_input_volume_meters(data): def main(): + host = os.getenv("OBSWS_HOST", "localhost") + port = int(os.getenv("OBSWS_PORT", 4455)) + password = os.getenv("OBSWS_PASSWORD", "") + with obs.EventClient( - subs=(obs.Subs.LOW_VOLUME | obs.Subs.INPUTVOLUMEMETERS) + host=host, + port=port, + password=password, + subs=(obs.Subs.LOW_VOLUME | obs.Subs.INPUTVOLUMEMETERS), ) as client: client.callback.register([on_input_volume_meters, on_input_mute_state_changed]) diff --git a/examples/scene_rotate/__main__.py b/examples/scene_rotate/__main__.py index 206f150..045b96c 100644 --- a/examples/scene_rotate/__main__.py +++ b/examples/scene_rotate/__main__.py @@ -1,16 +1,21 @@ +import os import time import obsws_python as obs def main(): - with obs.ReqClient() as client: + host = os.getenv("OBSWS_HOST", "localhost") + port = int(os.getenv("OBSWS_PORT", 4455)) + password = os.getenv("OBSWS_PASSWORD", "") + + with obs.ReqClient(host=host, port=port, password=password) as client: resp = client.get_scene_list() scenes = [di.get("sceneName") for di in reversed(resp.scenes)] for scene in scenes: print(f"Switching to scene {scene}") - client.set_current_program_scene(scene) + client.set_current_program_scene(scene_name=scene) time.sleep(0.5) diff --git a/pyproject.toml b/pyproject.toml index bc8003e..13d477f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,25 +24,30 @@ include = ["/obsws_python"] [tool.hatch.env] requires = ["hatch-dotenv"] +[tool.hatch.env.collectors.dotenv.e] +env-files = [".env"] +fail-on-missing = true + +[tool.hatch.env.collectors.dotenv.hatch-test] +env-files = [".env"] +fail-on-missing = true + [tool.hatch.envs.default] dependencies = ["pre-commit"] [tool.hatch.envs.e] dependencies = ["keyboard"] +env-include = ["OBSWS_*"] [tool.hatch.envs.e.scripts] -events = "python {root}\\examples\\events\\." -hotkeys = "python {root}\\examples\\hotkeys\\." -levels = "python {root}\\examples\\levels\\." -scene_rotate = "python {root}\\examples\\scene_rotate\\." +events = "python -m examples.events" +hotkeys = "python -m examples.hotkeys" +levels = "python -m examples.levels" +scene-rotate = "python -m examples.scene_rotate" [tool.hatch.envs.hatch-test] randomize = true -env-include = ["OBSWS_TEST_*"] - -[tool.hatch.env.collectors.dotenv.hatch-test] -env-files = [".env"] -fail-on-missing = true +env-include = ["OBSWS_*"] [tool.hatch.envs.hatch-test.scripts] run = "pytest{env:HATCH_TEST_ARGS:} {args}" diff --git a/tests/__init__.py b/tests/__init__.py index cdf0af1..f9fc69c 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -3,9 +3,9 @@ import os import obsws_python as obs req_cl = obs.ReqClient( - host=os.getenv("OBSWS_TEST_HOST", "localhost"), - port=int(os.getenv("OBSWS_TEST_PORT", 4455)), - password=os.getenv("OBSWS_TEST_PASSWORD", ""), + host=os.getenv("OBSWS_HOST", "localhost"), + port=int(os.getenv("OBSWS_PORT", 4455)), + password=os.getenv("OBSWS_PASSWORD", ""), ) diff --git a/tests/test_error.py b/tests/test_error.py index 5278ba2..1020707 100644 --- a/tests/test_error.py +++ b/tests/test_error.py @@ -11,8 +11,8 @@ class TestErrors: def test_it_raises_an_obssdk_error_on_incorrect_password(self): bad_conn = { - "host": os.getenv("OBSWS_TEST_HOST", "localhost"), - "port": int(os.getenv("OBSWS_TEST_PORT", 4455)), + "host": os.getenv("OBSWS_HOST", "localhost"), + "port": int(os.getenv("OBSWS_PORT", 4455)), "password": "incorrectpassword", } with pytest.raises( @@ -23,8 +23,8 @@ class TestErrors: def test_it_raises_an_obssdk_error_if_auth_enabled_but_no_password_provided(self): bad_conn = { - "host": os.getenv("OBSWS_TEST_HOST", "localhost"), - "port": int(os.getenv("OBSWS_TEST_PORT", 4455)), + "host": os.getenv("OBSWS_HOST", "localhost"), + "port": int(os.getenv("OBSWS_PORT", 4455)), "password": "", } with pytest.raises(