mirror of
https://github.com/home-assistant/core.git
synced 2025-07-04 20:07:10 +00:00
41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
"""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
|