"""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])