2026-04-05 04:34:40 +01:00

43 lines
1.4 KiB
Python

"""entry point for the FastAPI application."""
from contextlib import asynccontextmanager
import voicemeeterlib
from fastapi import Depends, FastAPI, HTTPException
from voicemeeterlib.error import CAPIError
from .dependencies import get_voicemeeter_client
from .web import bus, strip
@asynccontextmanager
async def lifespan(app):
"""Lifespan function to initialize and clean up the Voicemeeter client."""
app.state.voicemeeter = voicemeeterlib.api('potato', sync=True)
app.state.voicemeeter.login()
yield
app.state.voicemeeter.logout()
app = FastAPI(
lifespan=lifespan,
description='A REST API for controlling Voicemeeter.',
openapi_tags=[
{'name': 'strip', 'description': 'Endpoints for controlling strip parameters.'},
{'name': 'bus', 'description': 'Endpoints for controlling bus parameters.'},
],
)
app.include_router(strip.router, prefix='/strip/{index}')
app.include_router(bus.router, prefix='/bus/{index}')
@app.get('/health')
def health_check(voicemeeter=Depends(get_voicemeeter_client)):
"""Health check endpoint to verify the service is running."""
try:
version = voicemeeter.version
type_ = voicemeeter.type
except CAPIError as e:
raise HTTPException(status_code=503, detail=f'Voicemeeter API error: {str(e)}')
return {'status': 'ok', 'service': 'vmr-http', 'version': version, 'type': type_}