From 6476be53c542e2590e20c5ddf62b4910bb89f646 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Sun, 5 Apr 2026 04:34:40 +0100 Subject: [PATCH] DRY up the routes patch bump --- pyproject.toml | 2 +- src/vmr_http/app.py | 4 ++-- src/vmr_http/web/bus.py | 14 ++++++------ src/vmr_http/web/busmode.py | 6 +++--- src/vmr_http/web/eq.py | 22 +++++++++---------- src/vmr_http/web/strip.py | 36 +++++++++++++++---------------- src/vmr_http/web/stripcomp.py | 6 +++--- src/vmr_http/web/stripdenoiser.py | 6 +++--- src/vmr_http/web/stripgate.py | 6 +++--- uv.lock | 2 +- 10 files changed, 52 insertions(+), 52 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 1bbee58..b24abfb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "vmr-http" -version = "0.4.0" +version = "0.4.1" description = "HTTP API for controlling Voicemeeter" readme = "README.md" authors = [{ name = "onyx-and-iris", email = "code@onyxandiris.online" }] diff --git a/src/vmr_http/app.py b/src/vmr_http/app.py index c96a9d6..4c6084b 100644 --- a/src/vmr_http/app.py +++ b/src/vmr_http/app.py @@ -27,8 +27,8 @@ app = FastAPI( {'name': 'bus', 'description': 'Endpoints for controlling bus parameters.'}, ], ) -app.include_router(strip.router, prefix='/strip') -app.include_router(bus.router, prefix='/bus') +app.include_router(strip.router, prefix='/strip/{index}') +app.include_router(bus.router, prefix='/bus/{index}') @app.get('/health') diff --git a/src/vmr_http/web/bus.py b/src/vmr_http/web/bus.py index 2774ac2..9c683cb 100644 --- a/src/vmr_http/web/bus.py +++ b/src/vmr_http/web/bus.py @@ -8,12 +8,12 @@ from vmr_http.models.bus import BusParams from . import busmode, eq router = APIRouter() -router.include_router(busmode.router, tags=['bus mode']) -router.include_router(eq.router, tags=['bus eq']) +router.include_router(busmode.router, prefix='/mode', tags=['bus mode']) +router.include_router(eq.router, prefix='/eq', tags=['bus eq']) -@router.patch('/{index}', tags=['bus']) -@router.put('/{index}', tags=['bus']) +@router.patch('', tags=['bus']) +@router.put('', tags=['bus']) async def update_bus_params(index: int, params: BusParams, voicemeeter=Depends(get_voicemeeter_client)): """Update one or more parameters for the specified bus index.""" bus = voicemeeter.bus[index] @@ -24,19 +24,19 @@ async def update_bus_params(index: int, params: BusParams, voicemeeter=Depends(g return updated -@router.get('/{index}/gain', tags=['bus']) +@router.get('/gain', tags=['bus']) async def get_gain(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current gain value for the specified bus index.""" return {'gain': voicemeeter.bus[index].gain} -@router.get('/{index}/mute', tags=['bus']) +@router.get('/mute', tags=['bus']) async def get_mute(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current mute status for the specified bus index.""" return {'mute': voicemeeter.bus[index].mute} -@router.get('/{index}/mono', tags=['bus']) +@router.get('/mono', tags=['bus']) async def get_mono(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current mono status for the specified bus index.""" opts = ['Off', 'On', 'Stereo Reverse'] diff --git a/src/vmr_http/web/busmode.py b/src/vmr_http/web/busmode.py index 3f79cb8..2790687 100644 --- a/src/vmr_http/web/busmode.py +++ b/src/vmr_http/web/busmode.py @@ -23,8 +23,8 @@ _readable_busmodes = { _reversed_busmodes = {v: k for k, v in _readable_busmodes.items()} -@router.patch('/{index}/mode') -@router.put('/{index}/mode') +@router.patch('') +@router.put('') async def update_bus_mode(index: int, mode: str = Body(..., embed=True), voicemeeter=Depends(get_voicemeeter_client)): """Update the bus mode for the specified bus index.""" if mode not in _reversed_busmodes: @@ -35,7 +35,7 @@ async def update_bus_mode(index: int, mode: str = Body(..., embed=True), voiceme return {'mode': _readable_busmodes[_reversed_busmodes[mode]]} -@router.get('/{index}/mode') +@router.get('') async def get_bus_mode(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current bus mode for the specified bus index.""" return {'mode': _readable_busmodes.get(voicemeeter.bus[index].mode.get(), 'Unknown')} diff --git a/src/vmr_http/web/eq.py b/src/vmr_http/web/eq.py index 594d59e..5bacb4d 100644 --- a/src/vmr_http/web/eq.py +++ b/src/vmr_http/web/eq.py @@ -8,8 +8,8 @@ from vmr_http.models.eq import EQChannelCellParams cell_router = APIRouter() -@cell_router.patch('/{cell_index}') -@cell_router.put('/{cell_index}') +@cell_router.patch('') +@cell_router.put('') async def update_strip_eq_channel_cell_params( index: int, channel_index: int, @@ -26,7 +26,7 @@ async def update_strip_eq_channel_cell_params( return updated -@cell_router.get('/{cell_index}/on') +@cell_router.get('/on') async def get_strip_eq_channel_cell_on( index: int, channel_index: int, cell_index: int, voicemeeter=Depends(get_voicemeeter_client) ): @@ -34,7 +34,7 @@ async def get_strip_eq_channel_cell_on( return {'on': voicemeeter.strip[index].eq.channel[channel_index].cell[cell_index].on} -@cell_router.get('/{cell_index}/type') +@cell_router.get('/type') async def get_strip_eq_channel_cell_type( index: int, channel_index: int, cell_index: int, voicemeeter=Depends(get_voicemeeter_client) ): @@ -42,7 +42,7 @@ async def get_strip_eq_channel_cell_type( return {'type': voicemeeter.strip[index].eq.channel[channel_index].cell[cell_index].type} -@cell_router.get('/{cell_index}/f') +@cell_router.get('/f') async def get_strip_eq_channel_cell_f( index: int, channel_index: int, cell_index: int, voicemeeter=Depends(get_voicemeeter_client) ): @@ -50,7 +50,7 @@ async def get_strip_eq_channel_cell_f( return {'f': voicemeeter.strip[index].eq.channel[channel_index].cell[cell_index].f} -@cell_router.get('/{cell_index}/gain') +@cell_router.get('/gain') async def get_strip_eq_channel_cell_gain( index: int, channel_index: int, cell_index: int, voicemeeter=Depends(get_voicemeeter_client) ): @@ -58,7 +58,7 @@ async def get_strip_eq_channel_cell_gain( return {'gain': voicemeeter.strip[index].eq.channel[channel_index].cell[cell_index].gain} -@cell_router.get('/{cell_index}/q') +@cell_router.get('/q') async def get_strip_eq_channel_cell_q( index: int, channel_index: int, cell_index: int, voicemeeter=Depends(get_voicemeeter_client) ): @@ -67,11 +67,11 @@ async def get_strip_eq_channel_cell_q( router = APIRouter() -router.include_router(cell_router, prefix='/{index}/eq/channel/{channel_index}/cell') +router.include_router(cell_router, prefix='/channel/{channel_index}/cell/{cell_index}') -@router.patch('/{index}/eq') -@router.put('/{index}/eq') +@router.patch('') +@router.put('') async def update_strip_eq_params( index: int, on: bool = Body(..., embed=True), voicemeeter=Depends(get_voicemeeter_client) ): @@ -81,7 +81,7 @@ async def update_strip_eq_params( return {'on': strip_eq.on} -@router.get('/{index}/eq/on') +@router.get('/on') async def get_strip_eq_on(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current equalizer on status for the specified strip index.""" return {'on': voicemeeter.strip[index].eq.on} diff --git a/src/vmr_http/web/strip.py b/src/vmr_http/web/strip.py index 394df33..e241b73 100644 --- a/src/vmr_http/web/strip.py +++ b/src/vmr_http/web/strip.py @@ -8,14 +8,14 @@ from vmr_http.models.strip import StripParams from . import eq, stripcomp, stripdenoiser, stripgate router = APIRouter() -router.include_router(stripcomp.router, tags=['strip comp']) -router.include_router(stripgate.router, tags=['strip gate']) -router.include_router(stripdenoiser.router, tags=['strip denoiser']) -router.include_router(eq.router, tags=['strip eq']) +router.include_router(stripcomp.router, prefix='/comp', tags=['strip comp']) +router.include_router(stripgate.router, prefix='/gate', tags=['strip gate']) +router.include_router(stripdenoiser.router, prefix='/denoiser', tags=['strip denoiser']) +router.include_router(eq.router, prefix='/eq', tags=['strip eq']) -@router.patch('/{index}', tags=['strip']) -@router.put('/{index}', tags=['strip']) +@router.patch('', tags=['strip']) +@router.put('', tags=['strip']) async def update_strip_params(index: int, params: StripParams, voicemeeter=Depends(get_voicemeeter_client)): """Update one or more parameters for the specified strip index.""" strip = voicemeeter.strip[index] @@ -26,73 +26,73 @@ async def update_strip_params(index: int, params: StripParams, voicemeeter=Depen return updated -@router.get('/{index}/gain', tags=['strip']) +@router.get('/gain', tags=['strip']) async def get_gain(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current gain value for the specified strip index.""" return {'gain': voicemeeter.strip[index].gain} -@router.get('/{index}/mute', tags=['strip']) +@router.get('/mute', tags=['strip']) async def get_mute(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current mute status for the specified strip index.""" return {'mute': voicemeeter.strip[index].mute} -@router.get('/{index}/mono', tags=['strip']) +@router.get('/mono', tags=['strip']) async def get_mono(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current mono status for the specified strip index.""" return {'mono': voicemeeter.strip[index].mono} -@router.get('/{index}/solo', tags=['strip']) +@router.get('/solo', tags=['strip']) async def get_solo(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current solo status for the specified strip index.""" return {'solo': voicemeeter.strip[index].solo} -@router.get('/{index}/A1', tags=['strip']) +@router.get('/A1', tags=['strip']) async def get_A1(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current A1 output status for the specified strip index.""" return {'A1': voicemeeter.strip[index].A1} -@router.get('/{index}/A2', tags=['strip']) +@router.get('/A2', tags=['strip']) async def get_A2(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current A2 output status for the specified strip index.""" return {'A2': voicemeeter.strip[index].A2} -@router.get('/{index}/A3', tags=['strip']) +@router.get('/A3', tags=['strip']) async def get_A3(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current A3 output status for the specified strip index.""" return {'A3': voicemeeter.strip[index].A3} -@router.get('/{index}/A4', tags=['strip']) +@router.get('/A4', tags=['strip']) async def get_A4(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current A4 output status for the specified strip index.""" return {'A4': voicemeeter.strip[index].A4} -@router.get('/{index}/A5', tags=['strip']) +@router.get('/A5', tags=['strip']) async def get_A5(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current A5 output status for the specified strip index.""" return {'A5': voicemeeter.strip[index].A5} -@router.get('/{index}/B1', tags=['strip']) +@router.get('/B1', tags=['strip']) async def get_B1(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current B1 output status for the specified strip index.""" return {'B1': voicemeeter.strip[index].B1} -@router.get('/{index}/B2', tags=['strip']) +@router.get('/B2', tags=['strip']) async def get_B2(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current B2 output status for the specified strip index.""" return {'B2': voicemeeter.strip[index].B2} -@router.get('/{index}/B3', tags=['strip']) +@router.get('/B3', tags=['strip']) async def get_B3(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current B3 output status for the specified strip index.""" return {'B3': voicemeeter.strip[index].B3} diff --git a/src/vmr_http/web/stripcomp.py b/src/vmr_http/web/stripcomp.py index 50573a1..bfaf3b5 100644 --- a/src/vmr_http/web/stripcomp.py +++ b/src/vmr_http/web/stripcomp.py @@ -8,8 +8,8 @@ from vmr_http.models.strip import StripCompParams router = APIRouter() -@router.patch('/{index}/comp') -@router.put('/{index}/comp') +@router.patch('') +@router.put('') async def update_strip_comp_params(index: int, params: StripCompParams, voicemeeter=Depends(get_voicemeeter_client)): """Update one or more compressor parameters for the specified strip index.""" strip_comp = voicemeeter.strip[index].comp @@ -20,7 +20,7 @@ async def update_strip_comp_params(index: int, params: StripCompParams, voicemee return updated -@router.get('/{index}/comp/knob') +@router.get('/knob') async def get_strip_comp_knob(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current compressor knob value for the specified strip index.""" strip_comp = voicemeeter.strip[index].comp diff --git a/src/vmr_http/web/stripdenoiser.py b/src/vmr_http/web/stripdenoiser.py index bb5b545..ce3e859 100644 --- a/src/vmr_http/web/stripdenoiser.py +++ b/src/vmr_http/web/stripdenoiser.py @@ -8,8 +8,8 @@ from vmr_http.models.strip import StripDenoiserParams router = APIRouter() -@router.patch('/{index}/denoiser') -@router.put('/{index}/denoiser') +@router.patch('') +@router.put('') async def update_strip_denoiser_params( index: int, params: StripDenoiserParams, voicemeeter=Depends(get_voicemeeter_client) ): @@ -22,7 +22,7 @@ async def update_strip_denoiser_params( return updated -@router.get('/{index}/denoiser/knob') +@router.get('/knob') async def get_strip_denoiser_knob( index: int, voicemeeter=Depends(get_voicemeeter_client), diff --git a/src/vmr_http/web/stripgate.py b/src/vmr_http/web/stripgate.py index d08478e..9ab3ec8 100644 --- a/src/vmr_http/web/stripgate.py +++ b/src/vmr_http/web/stripgate.py @@ -8,8 +8,8 @@ from vmr_http.models.strip import StripGateParams router = APIRouter() -@router.patch('/{index}/gate') -@router.put('/{index}/gate') +@router.patch('') +@router.put('') async def update_strip_gate_params(index: int, params: StripGateParams, voicemeeter=Depends(get_voicemeeter_client)): """Update one or more gate parameters for the specified strip index.""" strip_gate = voicemeeter.strip[index].gate @@ -20,7 +20,7 @@ async def update_strip_gate_params(index: int, params: StripGateParams, voicemee return updated -@router.get('/{index}/gate/knob') +@router.get('/knob') async def get_strip_gate_knob(index: int, voicemeeter=Depends(get_voicemeeter_client)): """Get the current gate knob value for the specified strip index.""" strip_gate = voicemeeter.strip[index].gate diff --git a/uv.lock b/uv.lock index 11e947f..b1a8079 100644 --- a/uv.lock +++ b/uv.lock @@ -1151,7 +1151,7 @@ wheels = [ [[package]] name = "vmr-http" -version = "0.4.0" +version = "0.4.1" source = { editable = "." } dependencies = [ { name = "fastapi" },