1 """Utilities for Evil Genius Labs."""
3 from __future__
import annotations
5 from collections.abc
import Awaitable, Callable, Coroutine
6 from functools
import wraps
7 from typing
import Any, Concatenate
9 from .entity
import EvilGeniusEntity
12 def update_when_done[_EvilGeniusEntityT: EvilGeniusEntity, **_P, _R](
13 func: Callable[Concatenate[_EvilGeniusEntityT, _P], Awaitable[_R]],
14 ) -> Callable[Concatenate[_EvilGeniusEntityT, _P], Coroutine[Any, Any, _R]]:
15 """Decorate function to trigger update when function is done."""
19 self: _EvilGeniusEntityT, *args: _P.args, **kwargs: _P.kwargs
22 result = await func(self, *args, **kwargs)
23 await self.coordinator.async_request_refresh()