29 lines
895 B
Python
29 lines
895 B
Python
"""Helpers for the Music Assistant integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Callable, Coroutine
|
|
import functools
|
|
from typing import Any
|
|
|
|
from music_assistant_models.errors import MusicAssistantError
|
|
|
|
from homeassistant.exceptions import HomeAssistantError
|
|
|
|
|
|
def catch_musicassistant_error[**_P, _R](
|
|
func: Callable[_P, Coroutine[Any, Any, _R]],
|
|
) -> Callable[_P, Coroutine[Any, Any, _R]]:
|
|
"""Check and convert commands to players."""
|
|
|
|
@functools.wraps(func)
|
|
async def wrapper(*args: _P.args, **kwargs: _P.kwargs) -> _R:
|
|
"""Catch Music Assistant errors and convert to Home Assistant error."""
|
|
try:
|
|
return await func(*args, **kwargs)
|
|
except MusicAssistantError as err:
|
|
error_msg = str(err) or err.__class__.__name__
|
|
raise HomeAssistantError(error_msg) from err
|
|
|
|
return wrapper
|