"""Utils for Alexa Devices.""" from collections.abc import Awaitable, Callable, Coroutine from functools import wraps from typing import Any, Concatenate from aioamazondevices.exceptions import CannotConnect, CannotRetrieveData from homeassistant.exceptions import HomeAssistantError from .const import DOMAIN from .entity import AmazonEntity def alexa_api_call[_T: AmazonEntity, **_P]( func: Callable[Concatenate[_T, _P], Awaitable[None]], ) -> Callable[Concatenate[_T, _P], Coroutine[Any, Any, None]]: """Catch Alexa API call exceptions.""" @wraps(func) async def cmd_wrapper(self: _T, *args: _P.args, **kwargs: _P.kwargs) -> None: """Wrap all command methods.""" try: await func(self, *args, **kwargs) except CannotConnect as err: self.coordinator.last_update_success = False raise HomeAssistantError( translation_domain=DOMAIN, translation_key="cannot_connect", translation_placeholders={"error": repr(err)}, ) from err except CannotRetrieveData as err: self.coordinator.last_update_success = False raise HomeAssistantError( translation_domain=DOMAIN, translation_key="cannot_retrieve_data", translation_placeholders={"error": repr(err)}, ) from err return cmd_wrapper