mirror of
				https://github.com/home-assistant/core.git
				synced 2025-11-03 16:09:36 +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_with_error",
 | 
						|
                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_with_error",
 | 
						|
                translation_placeholders={"error": repr(err)},
 | 
						|
            ) from err
 | 
						|
 | 
						|
    return cmd_wrapper
 |