diff --git a/homeassistant/components/gdacs/__init__.py b/homeassistant/components/gdacs/__init__.py index e96246b70bf..1a8f2fce236 100644 --- a/homeassistant/components/gdacs/__init__.py +++ b/homeassistant/components/gdacs/__init__.py @@ -25,22 +25,17 @@ from homeassistant.helpers.event import async_track_time_interval from homeassistant.util.unit_conversion import DistanceConverter from homeassistant.util.unit_system import US_CUSTOMARY_SYSTEM -from .const import ( # noqa: F401 - CONF_CATEGORIES, - DEFAULT_SCAN_INTERVAL, - DOMAIN, - FEED, - PLATFORMS, -) +from .const import CONF_CATEGORIES, DEFAULT_SCAN_INTERVAL, PLATFORMS # noqa: F401 _LOGGER = logging.getLogger(__name__) +type GdacsConfigEntry = ConfigEntry[GdacsFeedEntityManager] -async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: + +async def async_setup_entry( + hass: HomeAssistant, config_entry: GdacsConfigEntry +) -> bool: """Set up the GDACS component as config entry.""" - hass.data.setdefault(DOMAIN, {}) - feeds = hass.data[DOMAIN].setdefault(FEED, {}) - radius = config_entry.data[CONF_RADIUS] if hass.config.units is US_CUSTOMARY_SYSTEM: radius = DistanceConverter.convert( @@ -48,16 +43,15 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b ) # Create feed entity manager for all platforms. manager = GdacsFeedEntityManager(hass, config_entry, radius) - feeds[config_entry.entry_id] = manager + config_entry.runtime_data = manager _LOGGER.debug("Feed entity manager added for %s", config_entry.entry_id) await manager.async_init() return True -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_unload_entry(hass: HomeAssistant, entry: GdacsConfigEntry) -> bool: """Unload an GDACS component config entry.""" - manager: GdacsFeedEntityManager = hass.data[DOMAIN][FEED].pop(entry.entry_id) - await manager.async_stop() + await entry.runtime_data.async_stop() return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) @@ -65,7 +59,7 @@ class GdacsFeedEntityManager: """Feed Entity Manager for GDACS feed.""" def __init__( - self, hass: HomeAssistant, config_entry: ConfigEntry, radius_in_km: float + self, hass: HomeAssistant, config_entry: GdacsConfigEntry, radius_in_km: float ) -> None: """Initialize the Feed Entity Manager.""" self._hass = hass diff --git a/homeassistant/components/gdacs/const.py b/homeassistant/components/gdacs/const.py index d1028ed2d08..c040809a357 100644 --- a/homeassistant/components/gdacs/const.py +++ b/homeassistant/components/gdacs/const.py @@ -10,8 +10,6 @@ DOMAIN = "gdacs" PLATFORMS = [Platform.GEO_LOCATION, Platform.SENSOR] -FEED = "feed" - CONF_CATEGORIES = "categories" DEFAULT_ICON = "mdi:alert" diff --git a/homeassistant/components/gdacs/diagnostics.py b/homeassistant/components/gdacs/diagnostics.py index 435e28ca1ae..9501fb29dd2 100644 --- a/homeassistant/components/gdacs/diagnostics.py +++ b/homeassistant/components/gdacs/diagnostics.py @@ -7,26 +7,23 @@ from typing import Any from aio_georss_client.status_update import StatusUpdate from homeassistant.components.diagnostics import async_redact_data -from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE from homeassistant.core import HomeAssistant -from . import GdacsFeedEntityManager -from .const import DOMAIN, FEED +from . import GdacsConfigEntry TO_REDACT = {CONF_LATITUDE, CONF_LONGITUDE} async def async_get_config_entry_diagnostics( - hass: HomeAssistant, config_entry: ConfigEntry + hass: HomeAssistant, config_entry: GdacsConfigEntry ) -> dict[str, Any]: """Return diagnostics for a config entry.""" data: dict[str, Any] = { "info": async_redact_data(config_entry.data, TO_REDACT), } - manager: GdacsFeedEntityManager = hass.data[DOMAIN][FEED][config_entry.entry_id] - status_info: StatusUpdate = manager.status_info() + status_info: StatusUpdate = config_entry.runtime_data.status_info() if status_info: data["service"] = { "status": status_info.status, diff --git a/homeassistant/components/gdacs/geo_location.py b/homeassistant/components/gdacs/geo_location.py index d277ee54f6b..e4057633101 100644 --- a/homeassistant/components/gdacs/geo_location.py +++ b/homeassistant/components/gdacs/geo_location.py @@ -10,7 +10,6 @@ from typing import Any from aio_georss_gdacs.feed_entry import GdacsFeedEntry from homeassistant.components.geo_location import GeolocationEvent -from homeassistant.config_entries import ConfigEntry from homeassistant.const import UnitOfLength from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import entity_registry as er @@ -19,8 +18,8 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.util.unit_conversion import DistanceConverter from homeassistant.util.unit_system import US_CUSTOMARY_SYSTEM -from . import GdacsFeedEntityManager -from .const import DEFAULT_ICON, DOMAIN, FEED +from . import GdacsConfigEntry, GdacsFeedEntityManager +from .const import DEFAULT_ICON _LOGGER = logging.getLogger(__name__) @@ -53,11 +52,11 @@ SOURCE = "gdacs" async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: GdacsConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up the GDACS Feed platform.""" - manager: GdacsFeedEntityManager = hass.data[DOMAIN][FEED][entry.entry_id] + manager = entry.runtime_data @callback def async_add_geolocation( diff --git a/homeassistant/components/gdacs/sensor.py b/homeassistant/components/gdacs/sensor.py index a204addd414..f23a02d92b0 100644 --- a/homeassistant/components/gdacs/sensor.py +++ b/homeassistant/components/gdacs/sensor.py @@ -10,15 +10,14 @@ from typing import Any from aio_georss_client.status_update import StatusUpdate from homeassistant.components.sensor import SensorEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.util import dt as dt_util -from . import GdacsFeedEntityManager -from .const import DOMAIN, FEED +from . import GdacsConfigEntry, GdacsFeedEntityManager +from .const import DOMAIN _LOGGER = logging.getLogger(__name__) @@ -38,12 +37,11 @@ PARALLEL_UPDATES = 0 async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: GdacsConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up the GDACS Feed platform.""" - manager: GdacsFeedEntityManager = hass.data[DOMAIN][FEED][entry.entry_id] - sensor = GdacsSensor(entry, manager) + sensor = GdacsSensor(entry, entry.runtime_data) async_add_entities([sensor]) @@ -57,7 +55,7 @@ class GdacsSensor(SensorEntity): _attr_translation_key = "alerts" def __init__( - self, config_entry: ConfigEntry, manager: GdacsFeedEntityManager + self, config_entry: GdacsConfigEntry, manager: GdacsFeedEntityManager ) -> None: """Initialize entity.""" assert config_entry.unique_id diff --git a/tests/components/gdacs/conftest.py b/tests/components/gdacs/conftest.py index 9d9a91aa407..46ac1d0aab2 100644 --- a/tests/components/gdacs/conftest.py +++ b/tests/components/gdacs/conftest.py @@ -2,7 +2,7 @@ import pytest -from homeassistant.components.gdacs import CONF_CATEGORIES, DOMAIN +from homeassistant.components.gdacs.const import CONF_CATEGORIES, DOMAIN from homeassistant.const import ( CONF_LATITUDE, CONF_LONGITUDE, diff --git a/tests/components/gdacs/test_config_flow.py b/tests/components/gdacs/test_config_flow.py index f11848162cd..da9b2f7c9bf 100644 --- a/tests/components/gdacs/test_config_flow.py +++ b/tests/components/gdacs/test_config_flow.py @@ -5,7 +5,7 @@ from unittest.mock import patch import pytest from homeassistant import config_entries -from homeassistant.components.gdacs import CONF_CATEGORIES, DOMAIN +from homeassistant.components.gdacs.const import CONF_CATEGORIES, DOMAIN from homeassistant.const import ( CONF_LATITUDE, CONF_LONGITUDE, diff --git a/tests/components/gdacs/test_geo_location.py b/tests/components/gdacs/test_geo_location.py index 68e2d061259..a6937f80d59 100644 --- a/tests/components/gdacs/test_geo_location.py +++ b/tests/components/gdacs/test_geo_location.py @@ -5,7 +5,7 @@ from unittest.mock import patch from freezegun import freeze_time -from homeassistant.components.gdacs import DEFAULT_SCAN_INTERVAL, DOMAIN, FEED +from homeassistant.components.gdacs.const import DEFAULT_SCAN_INTERVAL from homeassistant.components.gdacs.geo_location import ( ATTR_ALERT_LEVEL, ATTR_COUNTRY, @@ -251,10 +251,7 @@ async def test_setup_imperial( ) # Test conversion of 200 miles to kilometers. - feeds = hass.data[DOMAIN][FEED] - assert feeds is not None - assert len(feeds) == 1 - manager = list(feeds.values())[0] + manager = config_entry.runtime_data # Ensure that the filter value in km is correctly set. assert manager._feed_manager._feed._filter_radius == 321.8688 diff --git a/tests/components/gdacs/test_init.py b/tests/components/gdacs/test_init.py index 1da4b0d9b9f..bdd11242b25 100644 --- a/tests/components/gdacs/test_init.py +++ b/tests/components/gdacs/test_init.py @@ -2,7 +2,6 @@ from unittest.mock import patch -from homeassistant.components.gdacs import DOMAIN, FEED from homeassistant.core import HomeAssistant @@ -14,8 +13,7 @@ async def test_component_unload_config_entry(hass: HomeAssistant, config_entry) assert await hass.config_entries.async_setup(config_entry.entry_id) await hass.async_block_till_done() assert mock_feed_manager_update.call_count == 1 - assert hass.data[DOMAIN][FEED][config_entry.entry_id] is not None + # Unload config entry. assert await hass.config_entries.async_unload(config_entry.entry_id) await hass.async_block_till_done() - assert hass.data[DOMAIN][FEED].get(config_entry.entry_id) is None diff --git a/tests/components/gdacs/test_sensor.py b/tests/components/gdacs/test_sensor.py index 01609cf485e..abc095fb4f5 100644 --- a/tests/components/gdacs/test_sensor.py +++ b/tests/components/gdacs/test_sensor.py @@ -4,9 +4,8 @@ from unittest.mock import patch from freezegun import freeze_time -from homeassistant.components import gdacs from homeassistant.components.gdacs import DEFAULT_SCAN_INTERVAL -from homeassistant.components.gdacs.const import CONF_CATEGORIES +from homeassistant.components.gdacs.const import CONF_CATEGORIES, DOMAIN from homeassistant.components.gdacs.sensor import ( ATTR_CREATED, ATTR_LAST_UPDATE, @@ -73,7 +72,7 @@ async def test_setup(hass: HomeAssistant) -> None: CONF_SCAN_INTERVAL: DEFAULT_SCAN_INTERVAL.seconds, } config_entry = MockConfigEntry( - domain=gdacs.DOMAIN, + domain=DOMAIN, title=f"{latitude}, {longitude}", data=entry_data, unique_id="my_very_unique_id",