mirror of
https://github.com/onyx-and-iris/vmr-http.git
synced 2026-04-06 09:59:11 +00:00
43 lines
1.4 KiB
Python
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_}
|