general parser improvements.

index and ctx parameters now show as required in help output
This commit is contained in:
onyx-and-iris 2026-03-02 12:30:22 +00:00
parent a1da5c7256
commit 1f6811d5a0
10 changed files with 99 additions and 109 deletions

View File

@ -58,7 +58,7 @@ def sendtext(
text: Annotated[str, Argument()],
/,
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Send a text command to the current Voicemeeter/Matrix instance."""
if resp := ctx.client.sendtext(text):

View File

@ -13,19 +13,18 @@ app = App(name='bus', help_formatter=BusHelpFormatter())
@app.meta.default
def launcher(
index: Annotated[int, Argument()] = None,
index: Annotated[int, Argument()],
/,
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Control the bus parameters."""
additional_kwargs = {}
command, bound, _ = app.parse_args(tokens)
if tokens[0] == 'eq':
additional_kwargs['eq_kind'] = app.name[0]
if index is not None:
additional_kwargs['index'] = index
if ctx is not None:
additional_kwargs['ctx'] = ctx
additional_kwargs['index'] = index
additional_kwargs['ctx'] = ctx
return command(*bound.args, **bound.kwargs, **additional_kwargs)
@ -36,8 +35,8 @@ def mono(
Optional[Literal['off', 'mono', 'stereoreverse']], Argument()
] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the mono state of the specified bus.
@ -56,8 +55,8 @@ def mono(
def mute(
new_value: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the mute state of the specified bus.
@ -94,8 +93,8 @@ def mode(
Argument(),
] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the bus mode of the specified bus.

View File

@ -12,7 +12,7 @@ app = App(name='command', help_formatter=BaseHelpFormatter())
@app.command(name='show')
def show(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)] = None,
):
"""Bring the Voicemeeter GUI to the foreground."""
ctx.client.command.show()
@ -22,7 +22,7 @@ def show(
@app.command(name='hide')
def hide(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Send the Voicemeeter GUI to the background."""
ctx.client.command.hide()
@ -32,7 +32,7 @@ def hide(
@app.command(name='shutdown')
def shutdown(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Shut down Voicemeeter."""
ctx.client.command.shutdown()
@ -42,7 +42,7 @@ def shutdown(
@app.command(name='restart')
def restart(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Restart the Voicemeeter engine."""
ctx.client.command.restart()

View File

@ -11,16 +11,14 @@ app = App(name='comp', help_formatter=StripHelpFormatter())
@app.meta.default
def launcher(
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
index: Annotated[int, Argument()] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Control the compressor parameters."""
additional_kwargs = {}
command, bound, _ = app.parse_args(tokens)
if index is not None:
additional_kwargs['index'] = index
if ctx is not None:
additional_kwargs['ctx'] = ctx
additional_kwargs['index'] = index
additional_kwargs['ctx'] = ctx
return command(*bound.args, **bound.kwargs, **additional_kwargs)
@ -29,8 +27,8 @@ def launcher(
def knob(
new_knob: Annotated[float, Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the knob of the specified compressor.
@ -50,8 +48,8 @@ def knob(
def input_gain(
new_gain: Annotated[float, Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the input gain of the specified compressor.

View File

@ -11,16 +11,14 @@ app = App(name='denoiser', help_formatter=StripHelpFormatter())
@app.meta.default
def launcher(
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
index: Annotated[int, Argument()] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Control the denoiser parameters."""
additional_kwargs = {}
command, bound, _ = app.parse_args(tokens)
if index is not None:
additional_kwargs['index'] = index
if ctx is not None:
additional_kwargs['ctx'] = ctx
additional_kwargs['index'] = index
additional_kwargs['ctx'] = ctx
return command(*bound.args, **bound.kwargs, **additional_kwargs)
@ -29,8 +27,8 @@ def launcher(
def knob(
new_knob: Annotated[float, Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the knob of the specified denoiser.

View File

@ -14,9 +14,9 @@ app.command(cell_app.meta, name='cell')
@app.meta.default
def launcher(
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
eq_kind: Annotated[str, Parameter(show=False)] = None,
index: Annotated[int, Argument()] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
eq_kind: Annotated[str, Parameter(parse=False)],
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Control the EQ parameters."""
additional_kwargs = {}
@ -37,7 +37,7 @@ def launcher(
def on(
new_state: Annotated[bool, Argument()] = None,
*,
target: Annotated[object, Parameter(show=False)] = None,
target: Annotated[object, Parameter(parse=False)],
):
"""Get or set the on state of the specified EQ band.
@ -55,9 +55,10 @@ def on(
@cell_app.meta.default
def cell_launcher(
band: Annotated[int, Argument()] = None,
band: Annotated[int, Argument()],
/,
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
target: Annotated[object, Parameter(show=False)] = None,
target: Annotated[object, Parameter(parse=False)],
):
"""Control the EQ Cell parameters.
@ -74,7 +75,7 @@ def cell_launcher(
def cell_on(
new_state: Annotated[bool, Argument()] = None,
*,
target: Annotated[object, Parameter(show=False)] = None,
target: Annotated[object, Parameter(parse=False)],
):
"""Get or set the on state of the specified EQ cell.
@ -94,7 +95,7 @@ def cell_on(
def cell_freq(
new_freq: Annotated[float, Argument()] = None,
*,
target: Annotated[object, Parameter(show=False)] = None,
target: Annotated[object, Parameter(parse=False)],
):
"""Get or set the frequency of the specified EQ cell.
@ -114,7 +115,7 @@ def cell_freq(
def cell_gain(
new_gain: Annotated[float, Argument()] = None,
*,
target: Annotated[object, Parameter(show=False)] = None,
target: Annotated[object, Parameter(parse=False)],
):
"""Get or set the gain of the specified EQ cell.
@ -134,7 +135,7 @@ def cell_gain(
def cell_q(
new_q: Annotated[float, Argument()] = None,
*,
target: Annotated[object, Parameter(show=False)] = None,
target: Annotated[object, Parameter(parse=False)],
):
"""Get or set the Q of the specified EQ cell.
@ -154,7 +155,7 @@ def cell_q(
def cell_type(
new_type: Annotated[int, Argument()] = None,
*,
target: Annotated[object, Parameter(show=False)] = None,
target: Annotated[object, Parameter(parse=False)],
):
"""Get or set the type of the specified EQ cell.

View File

@ -11,21 +11,18 @@ app = App(name='gainlayer', help_formatter=GainlayerHelpFormatter())
@app.meta.default
def launcher(
gainlayer_index: Annotated[int, Argument()] = None,
gainlayer_index: Annotated[int, Argument()],
/,
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
index: Annotated[int, Argument()] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Control the gainlayers."""
additional_kwargs = {}
command, bound, _ = app.parse_args(tokens)
if index is not None and gainlayer_index is not None:
additional_kwargs['strip_index'] = index
additional_kwargs['gainlayer_index'] = gainlayer_index
else:
raise ValueError('Both gainlayer_index and index must be provided.')
if ctx is not None:
additional_kwargs['ctx'] = ctx
additional_kwargs['strip_index'] = index
additional_kwargs['gainlayer_index'] = gainlayer_index
additional_kwargs['ctx'] = ctx
return command(*bound.args, **bound.kwargs, **additional_kwargs)
@ -34,9 +31,9 @@ def launcher(
def level(
new_level: Annotated[float, Argument()] = None,
*,
strip_index: Annotated[int, Parameter(show=False)] = None,
gainlayer_index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
strip_index: Annotated[int, Parameter(parse=False)],
gainlayer_index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the level of the specified gainlayer.

View File

@ -11,16 +11,14 @@ app = App(name='gate', help_formatter=StripHelpFormatter())
@app.meta.default
def launcher(
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
index: Annotated[int, Argument()] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Control the compressor parameters."""
additional_kwargs = {}
command, bound, _ = app.parse_args(tokens)
if index is not None:
additional_kwargs['index'] = index
if ctx is not None:
additional_kwargs['ctx'] = ctx
additional_kwargs['index'] = index
additional_kwargs['ctx'] = ctx
return command(*bound.args, **bound.kwargs, **additional_kwargs)
@ -29,8 +27,8 @@ def launcher(
def knob(
new_knob: Annotated[float, Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the knob of the specified gate.
@ -50,8 +48,8 @@ def knob(
def threshold(
new_threshold: Annotated[float, Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the threshold of the specified gate.

View File

@ -13,7 +13,7 @@ app = App(name='recorder', help_formatter=BaseHelpFormatter())
@app.command(name='play')
def play(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Start the recorder playback."""
ctx.client.recorder.play()
@ -23,7 +23,7 @@ def play(
@app.command(name='pause')
def pause(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Pause the recorder playback."""
ctx.client.recorder.stop()
@ -33,7 +33,7 @@ def pause(
@app.command(name='stop')
def stop(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Stop the recorder playback/recording and reset to the beginning."""
ctx.client.recorder.stop()
@ -46,7 +46,7 @@ def stop(
@app.command(name='replay')
def replay(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Replay the recorder playback."""
ctx.client.recorder.replay()
@ -56,7 +56,7 @@ def replay(
@app.command(name='record')
def record(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Start recording."""
ctx.client.recorder.record()
@ -66,7 +66,7 @@ def record(
@app.command(name='pause-recording')
def pause_recording(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Pause the recorder recording."""
ctx.client.recorder.pause()
@ -76,7 +76,7 @@ def pause_recording(
@app.command(name='ff')
def ff(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Fast forward the recorder playback."""
ctx.client.recorder.ff()
@ -86,7 +86,7 @@ def ff(
@app.command(name='rew')
def rew(
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Rewind the recorder playback."""
ctx.client.recorder.rew()
@ -104,7 +104,7 @@ def load(
],
/,
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Load a file into the recorder.
@ -124,7 +124,7 @@ def goto(
],
/,
*,
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Go to a specific timestamp in the recorder playback."""
ctx.client.recorder.goto(time_string)

View File

@ -16,19 +16,18 @@ app.command(gainlayer.app.meta, name='gainlayer')
@app.meta.default
def launcher(
index: Annotated[int, Argument()] = None,
index: Annotated[int, Argument()],
/,
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
ctx: Annotated[Context, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Control the strip parameters."""
additional_kwargs = {}
command, bound, _ = app.parse_args(tokens)
if tokens[0] == 'eq':
additional_kwargs['eq_kind'] = app.name[0]
if index is not None:
additional_kwargs['index'] = index
if ctx is not None:
additional_kwargs['ctx'] = ctx
additional_kwargs['index'] = index
additional_kwargs['ctx'] = ctx
return command(*bound.args, **bound.kwargs, **additional_kwargs)
@ -37,8 +36,8 @@ def launcher(
def mono(
new_state: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the mono state of the specified strip.
@ -57,8 +56,8 @@ def mono(
def solo(
new_state: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the solo state of the specified strip.
@ -77,8 +76,8 @@ def solo(
def mute(
new_state: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the mute state of the specified strip.
@ -97,8 +96,8 @@ def mute(
def gain(
new_value: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the gain of the specified strip.
@ -117,8 +116,8 @@ def gain(
def a1(
new_value: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the A1 state of the specified strip.
@ -137,8 +136,8 @@ def a1(
def a2(
new_value: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the A2 state of the specified strip.
@ -157,8 +156,8 @@ def a2(
def a3(
new_value: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the A3 state of the specified strip.
@ -177,8 +176,8 @@ def a3(
def a4(
new_value: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the A4 state of the specified strip.
@ -197,8 +196,8 @@ def a4(
def a5(
new_value: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the A5 state of the specified strip.
@ -217,8 +216,8 @@ def a5(
def b1(
new_value: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the B1 state of the specified strip.
@ -237,8 +236,8 @@ def b1(
def b2(
new_value: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the B2 state of the specified strip.
@ -257,8 +256,8 @@ def b2(
def b3(
new_value: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(show=False)] = None,
ctx: Annotated[Context, Parameter(show=False)] = None,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the B3 state of the specified strip.