mirror of
https://github.com/onyx-and-iris/obsws-cli.git
synced 2025-08-07 20:21:48 +00:00
Compare commits
No commits in common. "c71aa82914296a09766b0fc07a251bf1e01fa10b" and "1c86b1f6ef18c06c05a4e6b45a725ecc627af07a" have entirely different histories.
c71aa82914
...
1c86b1f6ef
@ -1,4 +1,4 @@
|
||||
# SPDX-FileCopyrightText: 2025-present onyx-and-iris <code@onyxandiris.online>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
__version__ = "0.12.10"
|
||||
__version__ = "0.12.8"
|
||||
|
@ -1,6 +1,5 @@
|
||||
"""module containing commands for manipulating filters in scenes."""
|
||||
|
||||
import obsws_python as obsws
|
||||
import typer
|
||||
from rich.console import Console
|
||||
from rich.table import Table
|
||||
@ -21,14 +20,7 @@ def main():
|
||||
@app.command('list | ls')
|
||||
def list(ctx: typer.Context, source_name: str):
|
||||
"""List filters for a source."""
|
||||
try:
|
||||
resp = ctx.obj.get_source_filter_list(source_name)
|
||||
except obsws.error.OBSSDKError as e:
|
||||
if e.code == 600:
|
||||
err_console.print(f"No source was found by the name of '{source_name}'.")
|
||||
raise typer.Exit(1)
|
||||
else:
|
||||
raise
|
||||
resp = ctx.obj.get_source_filter_list(source_name)
|
||||
|
||||
if not resp.filters:
|
||||
out_console.print(f'No filters found for source {source_name}')
|
||||
|
@ -18,11 +18,6 @@ def main():
|
||||
@app.command('start | s')
|
||||
def start(ctx: typer.Context):
|
||||
"""Start the replay buffer."""
|
||||
resp = ctx.obj.get_replay_buffer_status()
|
||||
if resp.output_active:
|
||||
err_console.print('Replay buffer is already active.')
|
||||
raise typer.Exit(1)
|
||||
|
||||
ctx.obj.start_replay_buffer()
|
||||
out_console.print('Replay buffer started.')
|
||||
|
||||
@ -30,11 +25,6 @@ def start(ctx: typer.Context):
|
||||
@app.command('stop | st')
|
||||
def stop(ctx: typer.Context):
|
||||
"""Stop the replay buffer."""
|
||||
resp = ctx.obj.get_replay_buffer_status()
|
||||
if not resp.output_active:
|
||||
err_console.print('Replay buffer is not active.')
|
||||
raise typer.Exit(1)
|
||||
|
||||
ctx.obj.stop_replay_buffer()
|
||||
out_console.print('Replay buffer stopped.')
|
||||
|
||||
|
@ -32,11 +32,8 @@ def stop(ctx: typer.Context):
|
||||
@app.command('toggle | tg')
|
||||
def toggle(ctx: typer.Context):
|
||||
"""Toggle the virtual camera."""
|
||||
resp = ctx.obj.toggle_virtual_cam()
|
||||
if resp.output_active:
|
||||
out_console.print('Virtual camera is enabled.')
|
||||
else:
|
||||
out_console.print('Virtual camera is disabled.')
|
||||
ctx.obj.toggle_virtual_cam()
|
||||
out_console.print('Virtual camera toggled.')
|
||||
|
||||
|
||||
@app.command('status | ss')
|
||||
|
@ -46,9 +46,9 @@ def pytest_sessionstart(session):
|
||||
|
||||
session.obsws.set_current_scene_collection('test-collection')
|
||||
|
||||
session.obsws.create_scene('pytest_scene')
|
||||
session.obsws.create_scene('pytest')
|
||||
session.obsws.create_input(
|
||||
sceneName='pytest_scene',
|
||||
sceneName='pytest',
|
||||
inputName='pytest_input',
|
||||
inputKind='color_source_v3',
|
||||
inputSettings={
|
||||
@ -60,7 +60,7 @@ def pytest_sessionstart(session):
|
||||
sceneItemEnabled=True,
|
||||
)
|
||||
session.obsws.create_input(
|
||||
sceneName='pytest_scene',
|
||||
sceneName='pytest',
|
||||
inputName='pytest_input_2',
|
||||
inputKind='color_source_v3',
|
||||
inputSettings={
|
||||
@ -71,11 +71,11 @@ def pytest_sessionstart(session):
|
||||
},
|
||||
sceneItemEnabled=True,
|
||||
)
|
||||
resp = session.obsws.get_scene_item_list('pytest_scene')
|
||||
resp = session.obsws.get_scene_item_list('pytest')
|
||||
for item in resp.scene_items:
|
||||
if item['sourceName'] == 'pytest_input_2':
|
||||
session.obsws.set_scene_item_transform(
|
||||
'pytest_scene',
|
||||
'pytest',
|
||||
item['sceneItemId'],
|
||||
{
|
||||
'rotation': 0,
|
||||
@ -83,47 +83,13 @@ def pytest_sessionstart(session):
|
||||
)
|
||||
break
|
||||
|
||||
# Create a source filter for the Mic/Aux source
|
||||
session.obsws.create_source_filter(
|
||||
source_name='Mic/Aux',
|
||||
filter_name='pytest filter',
|
||||
filter_kind='compressor_filter',
|
||||
filter_settings={
|
||||
'threshold': -20,
|
||||
'ratio': 4,
|
||||
'attack_time': 10,
|
||||
'release_time': 100,
|
||||
'output_gain': -3.6,
|
||||
'sidechain_source': None,
|
||||
},
|
||||
)
|
||||
|
||||
# Create a source filter for the pytest scene
|
||||
session.obsws.create_source_filter(
|
||||
source_name='pytest_scene',
|
||||
filter_name='pytest filter',
|
||||
filter_kind='luma_key_filter_v2',
|
||||
filter_settings={'luma_max': 0.6509},
|
||||
)
|
||||
|
||||
|
||||
def pytest_sessionfinish(session, exitstatus):
|
||||
"""Call after the whole test run finishes.
|
||||
|
||||
Return the exit status to the system.
|
||||
"""
|
||||
session.obsws.remove_source_filter(
|
||||
source_name='Mic/Aux',
|
||||
filter_name='pytest filter',
|
||||
)
|
||||
|
||||
session.obsws.remove_source_filter(
|
||||
source_name='pytest_scene',
|
||||
filter_name='pytest filter',
|
||||
)
|
||||
|
||||
session.obsws.remove_scene('pytest_scene')
|
||||
|
||||
session.obsws.remove_scene('pytest')
|
||||
session.obsws.set_current_scene_collection('default')
|
||||
|
||||
resp = session.obsws.get_stream_status()
|
||||
@ -134,10 +100,6 @@ def pytest_sessionfinish(session, exitstatus):
|
||||
if resp.output_active:
|
||||
session.obsws.stop_record()
|
||||
|
||||
resp = session.obsws.get_replay_buffer_status()
|
||||
if resp.output_active:
|
||||
session.obsws.stop_replay_buffer()
|
||||
|
||||
# Close the OBS WebSocket client connection
|
||||
session.obsws.disconnect()
|
||||
|
||||
|
@ -4,7 +4,7 @@ from typer.testing import CliRunner
|
||||
|
||||
from obsws_cli.app import app
|
||||
|
||||
runner = CliRunner(mix_stderr=False)
|
||||
runner = CliRunner()
|
||||
|
||||
|
||||
def test_version():
|
@ -1,30 +0,0 @@
|
||||
"""Unit tests for the filter command in the OBS WebSocket CLI."""
|
||||
|
||||
from typer.testing import CliRunner
|
||||
|
||||
from obsws_cli.app import app
|
||||
|
||||
runner = CliRunner(mix_stderr=False)
|
||||
|
||||
|
||||
def test_filter_list():
|
||||
"""Test the filter list command on an audio source."""
|
||||
result = runner.invoke(app, ['filter', 'list', 'Mic/Aux'])
|
||||
assert result.exit_code == 0
|
||||
assert 'Filters for Source: Mic/Aux' in result.stdout
|
||||
assert 'pytest filter' in result.stdout
|
||||
|
||||
|
||||
def test_filter_list_scene():
|
||||
"""Test the filter list command on a scene."""
|
||||
result = runner.invoke(app, ['filter', 'list', 'pytest_scene'])
|
||||
assert result.exit_code == 0
|
||||
assert 'Filters for Source: pytest_scene' in result.stdout
|
||||
assert 'pytest filter' in result.stdout
|
||||
|
||||
|
||||
def test_filter_list_invalid_source():
|
||||
"""Test the filter list command with an invalid source."""
|
||||
result = runner.invoke(app, ['filter', 'list', 'invalid_source'])
|
||||
assert result.exit_code != 0
|
||||
assert "No source was found by the name of 'invalid_source'" in result.stderr
|
@ -4,7 +4,7 @@ from typer.testing import CliRunner
|
||||
|
||||
from obsws_cli.app import app
|
||||
|
||||
runner = CliRunner(mix_stderr=False)
|
||||
runner = CliRunner()
|
||||
|
||||
|
||||
def test_group_list():
|
||||
|
@ -1,14 +0,0 @@
|
||||
"""Unit tests for the hotkey command in the OBS WebSocket CLI."""
|
||||
|
||||
from typer.testing import CliRunner
|
||||
|
||||
from obsws_cli.app import app
|
||||
|
||||
runner = CliRunner(mix_stderr=False)
|
||||
|
||||
|
||||
def test_hotkey_list():
|
||||
"""Test the hotkey list command."""
|
||||
result = runner.invoke(app, ['hotkey', 'list'])
|
||||
assert result.exit_code == 0
|
||||
assert 'Hotkeys' in result.stdout
|
@ -1,47 +0,0 @@
|
||||
"""Unit tests for the input command in the OBS WebSocket CLI."""
|
||||
|
||||
from typer.testing import CliRunner
|
||||
|
||||
from obsws_cli.app import app
|
||||
|
||||
runner = CliRunner(mix_stderr=False)
|
||||
|
||||
|
||||
def test_input_list():
|
||||
"""Test the input list command."""
|
||||
result = runner.invoke(app, ['input', 'list'])
|
||||
assert result.exit_code == 0
|
||||
assert 'Desktop Audio' in result.stdout
|
||||
assert 'Mic/Aux' in result.stdout
|
||||
assert all(
|
||||
item in result.stdout
|
||||
for item in ('Colour Source', 'Colour Source 2', 'Colour Source 3')
|
||||
)
|
||||
|
||||
|
||||
def test_input_list_filter_input():
|
||||
"""Test the input list command with input filter."""
|
||||
result = runner.invoke(app, ['input', 'list', '--input'])
|
||||
assert result.exit_code == 0
|
||||
assert 'Desktop Audio' not in result.stdout
|
||||
assert 'Mic/Aux' in result.stdout
|
||||
|
||||
|
||||
def test_input_list_filter_output():
|
||||
"""Test the input list command with output filter."""
|
||||
result = runner.invoke(app, ['input', 'list', '--output'])
|
||||
assert result.exit_code == 0
|
||||
assert 'Desktop Audio' in result.stdout
|
||||
assert 'Mic/Aux' not in result.stdout
|
||||
|
||||
|
||||
def test_input_list_filter_colour():
|
||||
"""Test the input list command with colour filter."""
|
||||
result = runner.invoke(app, ['input', 'list', '--colour'])
|
||||
assert result.exit_code == 0
|
||||
assert all(
|
||||
item in result.stdout
|
||||
for item in ('Colour Source', 'Colour Source 2', 'Colour Source 3')
|
||||
)
|
||||
assert 'Desktop Audio' not in result.stdout
|
||||
assert 'Mic/Aux' not in result.stdout
|
@ -6,7 +6,7 @@ from typer.testing import CliRunner
|
||||
|
||||
from obsws_cli.app import app
|
||||
|
||||
runner = CliRunner(mix_stderr=False)
|
||||
runner = CliRunner()
|
||||
|
||||
|
||||
def test_record_start_status_stop():
|
||||
|
@ -1,52 +0,0 @@
|
||||
"""Unit tests for the replaybuffer command in the OBS WebSocket CLI."""
|
||||
|
||||
from typer.testing import CliRunner
|
||||
|
||||
from obsws_cli.app import app
|
||||
|
||||
runner = CliRunner(mix_stderr=False)
|
||||
|
||||
|
||||
def test_replaybuffer_start():
|
||||
"""Test the replay buffer start command."""
|
||||
resp = runner.invoke(app, ['replaybuffer', 'status'])
|
||||
assert resp.exit_code == 0
|
||||
active = 'Replay buffer is active.' in resp.stdout
|
||||
|
||||
resp = runner.invoke(app, ['replaybuffer', 'start'])
|
||||
if active:
|
||||
assert resp.exit_code != 0
|
||||
assert 'Replay buffer is already active.' in resp.stderr
|
||||
else:
|
||||
assert resp.exit_code == 0
|
||||
assert 'Replay buffer started.' in resp.stdout
|
||||
|
||||
|
||||
def test_replaybuffer_stop():
|
||||
"""Test the replay buffer stop command."""
|
||||
resp = runner.invoke(app, ['replaybuffer', 'status'])
|
||||
assert resp.exit_code == 0
|
||||
active = 'Replay buffer is active.' in resp.stdout
|
||||
|
||||
resp = runner.invoke(app, ['replaybuffer', 'stop'])
|
||||
if not active:
|
||||
assert resp.exit_code != 0
|
||||
assert 'Replay buffer is not active.' in resp.stderr
|
||||
else:
|
||||
assert resp.exit_code == 0
|
||||
assert 'Replay buffer stopped.' in resp.stdout
|
||||
|
||||
|
||||
def test_replaybuffer_toggle():
|
||||
"""Test the replay buffer toggle command."""
|
||||
resp = runner.invoke(app, ['replaybuffer', 'status'])
|
||||
assert resp.exit_code == 0
|
||||
active = 'Replay buffer is active.' in resp.stdout
|
||||
|
||||
resp = runner.invoke(app, ['replaybuffer', 'toggle'])
|
||||
if active:
|
||||
assert resp.exit_code == 0
|
||||
assert 'Replay buffer is not active.' in resp.stdout
|
||||
else:
|
||||
assert resp.exit_code == 0
|
||||
assert 'Replay buffer is active.' in resp.stdout
|
@ -4,22 +4,22 @@ from typer.testing import CliRunner
|
||||
|
||||
from obsws_cli.app import app
|
||||
|
||||
runner = CliRunner(mix_stderr=False)
|
||||
runner = CliRunner()
|
||||
|
||||
|
||||
def test_scene_list():
|
||||
"""Test the scene list command."""
|
||||
result = runner.invoke(app, ['scene', 'list'])
|
||||
assert result.exit_code == 0
|
||||
assert 'pytest_scene' in result.stdout
|
||||
assert 'pytest' in result.stdout
|
||||
|
||||
|
||||
def test_scene_current():
|
||||
"""Test the scene current command."""
|
||||
runner.invoke(app, ['scene', 'switch', 'pytest_scene'])
|
||||
runner.invoke(app, ['scene', 'switch', 'pytest'])
|
||||
result = runner.invoke(app, ['scene', 'current'])
|
||||
assert result.exit_code == 0
|
||||
assert 'pytest_scene' in result.stdout
|
||||
assert 'pytest' in result.stdout
|
||||
|
||||
|
||||
def test_scene_switch():
|
||||
@ -29,10 +29,10 @@ def test_scene_switch():
|
||||
enabled = 'Studio mode is enabled.' in result.stdout
|
||||
|
||||
if enabled:
|
||||
result = runner.invoke(app, ['scene', 'switch', 'pytest_scene', '--preview'])
|
||||
result = runner.invoke(app, ['scene', 'switch', 'pytest', '--preview'])
|
||||
assert result.exit_code == 0
|
||||
assert 'Switched to preview scene: pytest_scene' in result.stdout
|
||||
assert 'Switched to preview scene: pytest' in result.stdout
|
||||
else:
|
||||
result = runner.invoke(app, ['scene', 'switch', 'pytest_scene'])
|
||||
result = runner.invoke(app, ['scene', 'switch', 'pytest'])
|
||||
assert result.exit_code == 0
|
||||
assert 'Switched to program scene: pytest_scene' in result.stdout
|
||||
assert 'Switched to program scene: pytest' in result.stdout
|
||||
|
@ -4,12 +4,12 @@ from typer.testing import CliRunner
|
||||
|
||||
from obsws_cli.app import app
|
||||
|
||||
runner = CliRunner(mix_stderr=False)
|
||||
runner = CliRunner()
|
||||
|
||||
|
||||
def test_sceneitem_list():
|
||||
"""Test the sceneitem list command."""
|
||||
result = runner.invoke(app, ['sceneitem', 'list', 'pytest_scene'])
|
||||
result = runner.invoke(app, ['sceneitem', 'list', 'pytest'])
|
||||
assert result.exit_code == 0
|
||||
assert 'pytest_input' in result.stdout
|
||||
assert 'pytest_input_2' in result.stdout
|
||||
@ -23,12 +23,11 @@ def test_sceneitem_transform():
|
||||
'sceneitem',
|
||||
'transform',
|
||||
'--rotation=60',
|
||||
'pytest_scene',
|
||||
'pytest',
|
||||
'pytest_input_2',
|
||||
],
|
||||
)
|
||||
assert result.exit_code == 0
|
||||
assert (
|
||||
"Item 'pytest_input_2' in scene 'pytest_scene' has been transformed"
|
||||
in result.stdout
|
||||
"Item 'pytest_input_2' in scene 'pytest' has been transformed" in result.stdout
|
||||
)
|
||||
|
@ -6,7 +6,7 @@ from typer.testing import CliRunner
|
||||
|
||||
from obsws_cli.app import app
|
||||
|
||||
runner = CliRunner(mix_stderr=False)
|
||||
runner = CliRunner()
|
||||
|
||||
|
||||
def test_stream_start():
|
||||
|
@ -4,7 +4,7 @@ from typer.testing import CliRunner
|
||||
|
||||
from obsws_cli.app import app
|
||||
|
||||
runner = CliRunner(mix_stderr=False)
|
||||
runner = CliRunner()
|
||||
|
||||
|
||||
def test_studio_enable():
|
||||
|
Loading…
x
Reference in New Issue
Block a user