diff --git a/homeassistant/components/bond/__init__.py b/homeassistant/components/bond/__init__.py index 9ecfedee570..d534e10b023 100644 --- a/homeassistant/components/bond/__init__.py +++ b/homeassistant/components/bond/__init__.py @@ -35,8 +35,10 @@ _API_TIMEOUT = SLOW_UPDATE_WARNING - 1 _LOGGER = logging.getLogger(__name__) +BondConfigEntry = ConfigEntry[BondData] -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + +async def async_setup_entry(hass: HomeAssistant, entry: BondConfigEntry) -> bool: """Set up Bond from a config entry.""" host = entry.data[CONF_HOST] token = entry.data[CONF_ACCESS_TOKEN] @@ -70,7 +72,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: entry.async_on_unload( hass.bus.async_listen(EVENT_HOMEASSISTANT_STOP, _async_stop_event) ) - hass.data.setdefault(DOMAIN, {})[entry.entry_id] = BondData(hub, bpup_subs) + entry.runtime_data = BondData(hub, bpup_subs) if not entry.unique_id: hass.config_entries.async_update_entry(entry, unique_id=hub.bond_id) @@ -97,11 +99,9 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: return True -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_unload_entry(hass: HomeAssistant, entry: BondConfigEntry) -> bool: """Unload a config entry.""" - if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): - hass.data[DOMAIN].pop(entry.entry_id) - return unload_ok + return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) @callback @@ -118,10 +118,10 @@ def _async_remove_old_device_identifiers( async def async_remove_config_entry_device( - hass: HomeAssistant, config_entry: ConfigEntry, device_entry: dr.DeviceEntry + hass: HomeAssistant, config_entry: BondConfigEntry, device_entry: dr.DeviceEntry ) -> bool: """Remove bond config entry from a device.""" - data: BondData = hass.data[DOMAIN][config_entry.entry_id] + data = config_entry.runtime_data hub = data.hub for identifier in device_entry.identifiers: if identifier[0] != DOMAIN or len(identifier) != 3: diff --git a/homeassistant/components/bond/button.py b/homeassistant/components/bond/button.py index a8a5a890f2c..4e243198e5e 100644 --- a/homeassistant/components/bond/button.py +++ b/homeassistant/components/bond/button.py @@ -7,13 +7,11 @@ from dataclasses import dataclass from bond_async import Action, BPUPSubscriptions from homeassistant.components.button import ButtonEntity, ButtonEntityDescription -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import DOMAIN +from . import BondConfigEntry from .entity import BondEntity -from .models import BondData from .utils import BondDevice, BondHub # The api requires a step size even though it does not @@ -243,11 +241,11 @@ BUTTONS: tuple[BondButtonEntityDescription, ...] = ( async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: BondConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Bond button devices.""" - data: BondData = hass.data[DOMAIN][entry.entry_id] + data = entry.runtime_data hub = data.hub bpup_subs = data.bpup_subs entities: list[BondButtonEntity] = [] diff --git a/homeassistant/components/bond/cover.py b/homeassistant/components/bond/cover.py index 06576277520..c576972bf26 100644 --- a/homeassistant/components/bond/cover.py +++ b/homeassistant/components/bond/cover.py @@ -12,13 +12,11 @@ from homeassistant.components.cover import ( CoverEntity, CoverEntityFeature, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import DOMAIN +from . import BondConfigEntry from .entity import BondEntity -from .models import BondData from .utils import BondDevice, BondHub @@ -34,11 +32,11 @@ def _hass_to_bond_position(hass_position: int) -> int: async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: BondConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Bond cover devices.""" - data: BondData = hass.data[DOMAIN][entry.entry_id] + data = entry.runtime_data hub = data.hub bpup_subs = data.bpup_subs diff --git a/homeassistant/components/bond/diagnostics.py b/homeassistant/components/bond/diagnostics.py index 8b79f36dd0b..212df43a450 100644 --- a/homeassistant/components/bond/diagnostics.py +++ b/homeassistant/components/bond/diagnostics.py @@ -5,20 +5,18 @@ from __future__ import annotations from typing import Any from homeassistant.components.diagnostics import async_redact_data -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant -from .const import DOMAIN -from .models import BondData +from . import BondConfigEntry TO_REDACT = {"access_token"} async def async_get_config_entry_diagnostics( - hass: HomeAssistant, entry: ConfigEntry + hass: HomeAssistant, entry: BondConfigEntry ) -> dict[str, Any]: """Return diagnostics for a config entry.""" - data: BondData = hass.data[DOMAIN][entry.entry_id] + data = entry.runtime_data hub = data.hub return { "entry": { diff --git a/homeassistant/components/bond/fan.py b/homeassistant/components/bond/fan.py index 1b7a06fcd37..4ed6f83a980 100644 --- a/homeassistant/components/bond/fan.py +++ b/homeassistant/components/bond/fan.py @@ -16,7 +16,6 @@ from homeassistant.components.fan import ( FanEntity, FanEntityFeature, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import entity_platform @@ -27,9 +26,9 @@ from homeassistant.util.percentage import ( ) from homeassistant.util.scaling import int_states_in_range -from .const import DOMAIN, SERVICE_SET_FAN_SPEED_TRACKED_STATE +from . import BondConfigEntry +from .const import SERVICE_SET_FAN_SPEED_TRACKED_STATE from .entity import BondEntity -from .models import BondData from .utils import BondDevice, BondHub _LOGGER = logging.getLogger(__name__) @@ -39,11 +38,11 @@ PRESET_MODE_BREEZE = "Breeze" async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: BondConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Bond fan devices.""" - data: BondData = hass.data[DOMAIN][entry.entry_id] + data = entry.runtime_data hub = data.hub bpup_subs = data.bpup_subs platform = entity_platform.async_get_current_platform() diff --git a/homeassistant/components/bond/light.py b/homeassistant/components/bond/light.py index bd1183a3a98..8ad348064d3 100644 --- a/homeassistant/components/bond/light.py +++ b/homeassistant/components/bond/light.py @@ -10,21 +10,19 @@ from bond_async import Action, BPUPSubscriptions, DeviceType import voluptuous as vol from homeassistant.components.light import ATTR_BRIGHTNESS, ColorMode, LightEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import config_validation as cv, entity_platform from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity_platform import AddEntitiesCallback +from . import BondConfigEntry from .const import ( ATTR_POWER_STATE, - DOMAIN, SERVICE_SET_LIGHT_BRIGHTNESS_TRACKED_STATE, SERVICE_SET_LIGHT_POWER_TRACKED_STATE, ) from .entity import BondEntity -from .models import BondData from .utils import BondDevice, BondHub _LOGGER = logging.getLogger(__name__) @@ -42,11 +40,11 @@ ENTITY_SERVICES = [ async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: BondConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Bond light devices.""" - data: BondData = hass.data[DOMAIN][entry.entry_id] + data = entry.runtime_data hub = data.hub bpup_subs = data.bpup_subs platform = entity_platform.async_get_current_platform() diff --git a/homeassistant/components/bond/switch.py b/homeassistant/components/bond/switch.py index aa39f871c95..b8aaa81cd05 100644 --- a/homeassistant/components/bond/switch.py +++ b/homeassistant/components/bond/switch.py @@ -9,24 +9,23 @@ from bond_async import Action, DeviceType import voluptuous as vol from homeassistant.components.switch import SwitchEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import config_validation as cv, entity_platform from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import ATTR_POWER_STATE, DOMAIN, SERVICE_SET_POWER_TRACKED_STATE +from . import BondConfigEntry +from .const import ATTR_POWER_STATE, SERVICE_SET_POWER_TRACKED_STATE from .entity import BondEntity -from .models import BondData async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: BondConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Bond generic devices.""" - data: BondData = hass.data[DOMAIN][entry.entry_id] + data = entry.runtime_data hub = data.hub bpup_subs = data.bpup_subs platform = entity_platform.async_get_current_platform() diff --git a/tests/components/bond/test_init.py b/tests/components/bond/test_init.py index 3ad589d2d10..0aaff0edfe7 100644 --- a/tests/components/bond/test_init.py +++ b/tests/components/bond/test_init.py @@ -6,7 +6,7 @@ from aiohttp import ClientConnectionError, ClientResponseError from bond_async import DeviceType import pytest -from homeassistant.components.bond.const import DOMAIN +from homeassistant.components.bond import DOMAIN, BondData from homeassistant.components.fan import DOMAIN as FAN_DOMAIN from homeassistant.config_entries import ConfigEntryState from homeassistant.const import ATTR_ASSUMED_STATE, CONF_ACCESS_TOKEN, CONF_HOST @@ -107,7 +107,7 @@ async def test_async_setup_entry_sets_up_hub_and_supported_domains( assert result is True await hass.async_block_till_done() - assert config_entry.entry_id in hass.data[DOMAIN] + assert isinstance(config_entry.runtime_data, BondData) assert config_entry.state is ConfigEntryState.LOADED assert config_entry.unique_id == "ZXXX12345" @@ -148,7 +148,6 @@ async def test_unload_config_entry(hass: HomeAssistant) -> None: await hass.config_entries.async_unload(config_entry.entry_id) await hass.async_block_till_done() - assert config_entry.entry_id not in hass.data[DOMAIN] assert config_entry.state is ConfigEntryState.NOT_LOADED @@ -194,7 +193,6 @@ async def test_old_identifiers_are_removed( assert await hass.config_entries.async_setup(config_entry.entry_id) is True await hass.async_block_till_done() - assert config_entry.entry_id in hass.data[DOMAIN] assert config_entry.state is ConfigEntryState.LOADED assert config_entry.unique_id == "ZXXX12345" @@ -238,7 +236,6 @@ async def test_smart_by_bond_device_suggested_area( assert await hass.config_entries.async_setup(config_entry.entry_id) is True await hass.async_block_till_done() - assert config_entry.entry_id in hass.data[DOMAIN] assert config_entry.state is ConfigEntryState.LOADED assert config_entry.unique_id == "KXXX12345" @@ -287,7 +284,6 @@ async def test_bridge_device_suggested_area( assert await hass.config_entries.async_setup(config_entry.entry_id) is True await hass.async_block_till_done() - assert config_entry.entry_id in hass.data[DOMAIN] assert config_entry.state is ConfigEntryState.LOADED assert config_entry.unique_id == "ZXXX12345"