mirror of
https://github.com/home-assistant/core.git
synced 2025-07-15 17:27:10 +00:00
Add decorator typing [yeelight] (#107598)
This commit is contained in:
parent
25f4fe4a85
commit
bee53f6004
@ -2,9 +2,10 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from collections.abc import Callable, Coroutine
|
||||
import logging
|
||||
import math
|
||||
from typing import Any
|
||||
from typing import Any, Concatenate, ParamSpec, TypeVar
|
||||
|
||||
import voluptuous as vol
|
||||
import yeelight
|
||||
@ -66,6 +67,10 @@ from .const import (
|
||||
from .device import YeelightDevice
|
||||
from .entity import YeelightEntity
|
||||
|
||||
_YeelightBaseLightT = TypeVar("_YeelightBaseLightT", bound="YeelightBaseLight")
|
||||
_R = TypeVar("_R")
|
||||
_P = ParamSpec("_P")
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
ATTR_MINUTES = "minutes"
|
||||
@ -238,10 +243,14 @@ def _parse_custom_effects(effects_config) -> dict[str, dict[str, Any]]:
|
||||
return effects
|
||||
|
||||
|
||||
def _async_cmd(func):
|
||||
def _async_cmd(
|
||||
func: Callable[Concatenate[_YeelightBaseLightT, _P], Coroutine[Any, Any, _R]],
|
||||
) -> Callable[Concatenate[_YeelightBaseLightT, _P], Coroutine[Any, Any, _R | None]]:
|
||||
"""Define a wrapper to catch exceptions from the bulb."""
|
||||
|
||||
async def _async_wrap(self: YeelightBaseLight, *args, **kwargs):
|
||||
async def _async_wrap(
|
||||
self: _YeelightBaseLightT, *args: _P.args, **kwargs: _P.kwargs
|
||||
) -> _R | None:
|
||||
for attempts in range(2):
|
||||
try:
|
||||
_LOGGER.debug("Calling %s with %s %s", func, args, kwargs)
|
||||
@ -269,6 +278,7 @@ def _async_cmd(func):
|
||||
f"Error when calling {func.__name__} for bulb "
|
||||
f"{self.device.name} at {self.device.host}: {str(ex) or type(ex)}"
|
||||
) from ex
|
||||
return None
|
||||
|
||||
return _async_wrap
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user