44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
|
"""Common data structures and helpers for accessing them."""
|
||
|
|
||
|
from collections.abc import Sequence
|
||
|
from dataclasses import dataclass
|
||
|
from typing import TYPE_CHECKING, cast
|
||
|
|
||
|
import pywemo
|
||
|
|
||
|
from homeassistant.core import HomeAssistant, callback
|
||
|
|
||
|
from .const import DOMAIN
|
||
|
|
||
|
if TYPE_CHECKING: # Avoid circular dependencies.
|
||
|
from . import HostPortTuple, WemoDiscovery, WemoDispatcher
|
||
|
from .wemo_device import DeviceCoordinator
|
||
|
|
||
|
|
||
|
@dataclass
|
||
|
class WemoConfigEntryData:
|
||
|
"""Config entry state data."""
|
||
|
|
||
|
device_coordinators: dict[str, "DeviceCoordinator"]
|
||
|
discovery: "WemoDiscovery"
|
||
|
dispatcher: "WemoDispatcher"
|
||
|
|
||
|
|
||
|
@dataclass
|
||
|
class WemoData:
|
||
|
"""Component state data."""
|
||
|
|
||
|
discovery_enabled: bool
|
||
|
static_config: Sequence["HostPortTuple"]
|
||
|
registry: pywemo.SubscriptionRegistry
|
||
|
# config_entry_data is set when the config entry is loaded and unset when it's
|
||
|
# unloaded. It's a programmer error if config_entry_data is accessed when the
|
||
|
# config entry is not loaded
|
||
|
config_entry_data: WemoConfigEntryData = None # type: ignore[assignment]
|
||
|
|
||
|
|
||
|
@callback
|
||
|
def async_wemo_data(hass: HomeAssistant) -> WemoData:
|
||
|
"""Fetch WemoData with proper typing."""
|
||
|
return cast(WemoData, hass.data[DOMAIN])
|