46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
"""Typing Helpers for Home Assistant."""
|
|
from collections.abc import Mapping
|
|
from enum import Enum
|
|
from typing import Any, Optional, Protocol, Union
|
|
|
|
import homeassistant.core
|
|
|
|
GPSType = tuple[float, float]
|
|
ConfigType = dict[str, Any]
|
|
ContextType = homeassistant.core.Context
|
|
DiscoveryInfoType = dict[str, Any]
|
|
EventType = homeassistant.core.Event
|
|
ServiceDataType = dict[str, Any]
|
|
StateType = Union[None, str, int, float]
|
|
TemplateVarsType = Optional[Mapping[str, Any]]
|
|
|
|
# Custom type for recorder Queries
|
|
QueryType = Any
|
|
|
|
|
|
class UndefinedType(Enum):
|
|
"""Singleton type for use with not set sentinel values."""
|
|
|
|
_singleton = 0
|
|
|
|
|
|
UNDEFINED = UndefinedType._singleton # pylint: disable=protected-access
|
|
|
|
|
|
class UnitConverter(Protocol):
|
|
"""Define the format of a conversion utility."""
|
|
|
|
VALID_UNITS: tuple[str, ...]
|
|
NORMALIZED_UNIT: str
|
|
|
|
def convert(self, value: float, from_unit: str, to_unit: str) -> float:
|
|
"""Convert one unit of measurement to another."""
|
|
|
|
|
|
# The following types should not used and
|
|
# are not present in the core code base.
|
|
# They are kept in order not to break custom integrations
|
|
# that may rely on them.
|
|
# In due time they will be removed.
|
|
HomeAssistantType = homeassistant.core.HomeAssistant
|
|
ServiceCallType = homeassistant.core.ServiceCall
|