"""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