mirror of
https://github.com/home-assistant/core.git
synced 2025-07-09 06:17:07 +00:00
Improve ignore_variance typing (#83927)
This commit is contained in:
parent
9f67eb1aaa
commit
0e95875912
@ -6,36 +6,39 @@ from datetime import datetime, timedelta
|
|||||||
import functools
|
import functools
|
||||||
from typing import Any, TypeVar, overload
|
from typing import Any, TypeVar, overload
|
||||||
|
|
||||||
T = TypeVar("T", int, float, datetime)
|
from typing_extensions import ParamSpec
|
||||||
|
|
||||||
|
_R = TypeVar("_R", int, float, datetime)
|
||||||
|
_P = ParamSpec("_P")
|
||||||
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def ignore_variance(
|
def ignore_variance(
|
||||||
func: Callable[..., int], ignored_variance: int
|
func: Callable[_P, int], ignored_variance: int
|
||||||
) -> Callable[..., int]:
|
) -> Callable[_P, int]:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def ignore_variance(
|
def ignore_variance(
|
||||||
func: Callable[..., float], ignored_variance: float
|
func: Callable[_P, float], ignored_variance: float
|
||||||
) -> Callable[..., float]:
|
) -> Callable[_P, float]:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def ignore_variance(
|
def ignore_variance(
|
||||||
func: Callable[..., datetime], ignored_variance: timedelta
|
func: Callable[_P, datetime], ignored_variance: timedelta
|
||||||
) -> Callable[..., datetime]:
|
) -> Callable[_P, datetime]:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
def ignore_variance(func: Callable[..., T], ignored_variance: Any) -> Callable[..., T]:
|
def ignore_variance(func: Callable[_P, _R], ignored_variance: Any) -> Callable[_P, _R]:
|
||||||
"""Wrap a function that returns old result if new result does not vary enough."""
|
"""Wrap a function that returns old result if new result does not vary enough."""
|
||||||
last_value: T | None = None
|
last_value: _R | None = None
|
||||||
|
|
||||||
@functools.wraps(func)
|
@functools.wraps(func)
|
||||||
def wrapper(*args: Any, **kwargs: Any) -> T:
|
def wrapper(*args: _P.args, **kwargs: _P.kwargs) -> _R:
|
||||||
nonlocal last_value
|
nonlocal last_value
|
||||||
|
|
||||||
value = func(*args, **kwargs)
|
value = func(*args, **kwargs)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user