eq commands should target the right kind of eq

cell command group has now been attached to eq. this modifies the structure of CLI slightly.
This commit is contained in:
onyx-and-iris 2026-02-27 22:50:00 +00:00
parent 9938eaa49f
commit 1dd518095a
5 changed files with 97 additions and 19 deletions

View File

@ -1,11 +1,15 @@
[project] [project]
name = "vban-cli" name = "vban-cli"
version = "0.3.0" version = "0.4.0"
description = "A command-line interface for Voicemeeter leveraging VBAN." description = "A command-line interface for Voicemeeter leveraging VBAN."
readme = "README.md" readme = "README.md"
license = { text = "LICENSE" } license = { text = "LICENSE" }
requires-python = ">=3.13" requires-python = ">=3.13"
dependencies = ["cyclopts>=4.6.0", "vban-cmd>=2.6.0"] dependencies = [
"cyclopts>=4.6.0",
"loguru>=0.7.3",
"vban-cmd>=2.6.0",
]
classifiers = [ classifiers = [
"Development Status :: 3 - Alpha", "Development Status :: 3 - Alpha",
"Programming Language :: Python", "Programming Language :: Python",

View File

@ -20,6 +20,8 @@ def launcher(
"""Control the bus parameters.""" """Control the bus parameters."""
additional_kwargs = {} additional_kwargs = {}
command, bound, _ = app.parse_args(tokens) command, bound, _ = app.parse_args(tokens)
if tokens[0] == 'eq':
additional_kwargs['eq_kind'] = app.name[0]
if index is not None: if index is not None:
additional_kwargs['index'] = index additional_kwargs['index'] = index
if ctx is not None: if ctx is not None:

View File

@ -5,28 +5,30 @@ from cyclopts import App, Argument, Parameter
from .context import Context from .context import Context
from .help import CustomHelpFormatter from .help import CustomHelpFormatter
cell_app = App(name='cell', help_formatter=CustomHelpFormatter())
app = App(name='eq', help_formatter=CustomHelpFormatter()) app = App(name='eq', help_formatter=CustomHelpFormatter())
app.command(cell_app.meta, name='cell')
@app.meta.default @app.meta.default
def launcher( def launcher(
band: Annotated[int, Argument()] = None,
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)], *tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
eq_kind: Annotated[str, Parameter(show=False)] = None,
index: Annotated[int, Argument()] = None, index: Annotated[int, Argument()] = None,
ctx: Annotated[Context, Parameter(show=False)] = None, ctx: Annotated[Context, Parameter(show=False)] = None,
): ):
"""Control the EQ parameters. """Control the EQ parameters."""
Only channel 0 is supported, see https://github.com/onyx-and-iris/vban-cli?tab=readme-ov-file#implementation-notes - 3.
"""
additional_kwargs = {} additional_kwargs = {}
command, bound, _ = app.parse_args(tokens) command, bound, _ = app.parse_args(tokens)
if index is not None: match eq_kind:
additional_kwargs['index'] = index case 'strip':
if band is not None: target = ctx.client.strip[index].eq
additional_kwargs['band'] = band case 'bus':
if ctx is not None: target = ctx.client.bus[index].eq
additional_kwargs['ctx'] = ctx case _:
raise ValueError(f'Invalid eq_kind: {eq_kind}')
additional_kwargs['target'] = target
return command(*bound.args, **bound.kwargs, **additional_kwargs) return command(*bound.args, **bound.kwargs, **additional_kwargs)
@ -35,9 +37,7 @@ def launcher(
def on( def on(
new_state: Annotated[bool, Argument()] = None, new_state: Annotated[bool, Argument()] = None,
*, *,
index: Annotated[int, Parameter(show=False)] = None, target: Annotated[object, Parameter(show=False)] = None,
band: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
): ):
"""Get or set the on state of the specified EQ band. """Get or set the on state of the specified EQ band.
@ -48,6 +48,43 @@ def on(
""" """
if new_state is None: if new_state is None:
# See https://github.com/onyx-and-iris/vban-cli?tab=readme-ov-file#implementation-notes - 2. # See https://github.com/onyx-and-iris/vban-cli?tab=readme-ov-file#implementation-notes - 2.
# console.out.print(ctx.client.strip[index].eq.channel[0].cell[band].on) # console.out.print(target.on)
return return
ctx.client.strip[index].eq.channel[0].cell[band].on = new_state target.on = new_state
@cell_app.meta.default
def cell_launcher(
band: Annotated[int, Argument()] = None,
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
target: Annotated[object, Parameter(show=False)] = None,
):
"""Control the EQ Cell parameters.
Only channel 0 is supported, see https://github.com/onyx-and-iris/vban-cli?tab=readme-ov-file#implementation-notes - 3.
"""
additional_kwargs = {}
command, bound, _ = app.parse_args(tokens)
additional_kwargs['target'] = target.channel[0].cell[band]
return command(*bound.args, **bound.kwargs, **additional_kwargs)
@cell_app.command(name='on')
def cell_on(
new_state: Annotated[bool, Argument()] = None,
*,
target: Annotated[object, Parameter(show=False)] = None,
):
"""Get or set the on state of the specified EQ cell.
Parameters
----------
new_state : bool
If provided, sets the on state to this value. If not provided, the current on state is printed.
"""
if new_state is None:
# See https://github.com/onyx-and-iris/vban-cli?tab=readme-ov-file#implementation-notes - 2.
# console.out.print(target.on)
return
target.on = new_state

View File

@ -22,6 +22,8 @@ def launcher(
"""Control the strip parameters.""" """Control the strip parameters."""
additional_kwargs = {} additional_kwargs = {}
command, bound, _ = app.parse_args(tokens) command, bound, _ = app.parse_args(tokens)
if tokens[0] == 'eq':
additional_kwargs['eq_kind'] = app.name[0]
if index is not None: if index is not None:
additional_kwargs['index'] = index additional_kwargs['index'] = index
if ctx is not None: if ctx is not None:

35
uv.lock generated
View File

@ -11,6 +11,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" },
] ]
[[package]]
name = "colorama"
version = "0.4.6"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
]
[[package]] [[package]]
name = "cyclopts" name = "cyclopts"
version = "4.6.0" version = "4.6.0"
@ -44,6 +53,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196, upload-time = "2025-12-18T19:00:18.077Z" }, { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196, upload-time = "2025-12-18T19:00:18.077Z" },
] ]
[[package]]
name = "loguru"
version = "0.7.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
{ name = "win32-setctime", marker = "sys_platform == 'win32'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" },
]
[[package]] [[package]]
name = "markdown-it-py" name = "markdown-it-py"
version = "4.0.0" version = "4.0.0"
@ -102,16 +124,18 @@ wheels = [
[[package]] [[package]]
name = "vban-cli" name = "vban-cli"
version = "0.3.0" version = "0.4.0"
source = { editable = "." } source = { editable = "." }
dependencies = [ dependencies = [
{ name = "cyclopts" }, { name = "cyclopts" },
{ name = "loguru" },
{ name = "vban-cmd" }, { name = "vban-cmd" },
] ]
[package.metadata] [package.metadata]
requires-dist = [ requires-dist = [
{ name = "cyclopts", specifier = ">=4.6.0" }, { name = "cyclopts", specifier = ">=4.6.0" },
{ name = "loguru", specifier = ">=0.7.3" },
{ name = "vban-cmd", directory = "../vban-cmd-python" }, { name = "vban-cmd", directory = "../vban-cmd-python" },
] ]
@ -122,3 +146,12 @@ source = { directory = "../vban-cmd-python" }
[package.metadata] [package.metadata]
requires-dist = [{ name = "tomli", marker = "python_full_version < '3.11'", specifier = ">=2.0.1,<3.0" }] requires-dist = [{ name = "tomli", marker = "python_full_version < '3.11'", specifier = ">=2.0.1,<3.0" }]
[[package]]
name = "win32-setctime"
version = "1.2.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" },
]