From 8d290dd9d6de3b54d442b901757f5ebb5f4db9a7 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Tue, 16 Jul 2024 22:35:04 +0200 Subject: [PATCH] Convert arcam_fmj to runtime data (#122047) --- .../components/arcam_fmj/__init__.py | 25 +++++-------------- .../components/arcam_fmj/config_flow.py | 11 ++------ homeassistant/components/arcam_fmj/const.py | 2 -- .../components/arcam_fmj/media_player.py | 7 +++--- .../components/arcam_fmj/test_config_flow.py | 12 +-------- 5 files changed, 12 insertions(+), 45 deletions(-) diff --git a/homeassistant/components/arcam_fmj/__init__.py b/homeassistant/components/arcam_fmj/__init__.py index e4a0ae78920..e1a2ee0a046 100644 --- a/homeassistant/components/arcam_fmj/__init__.py +++ b/homeassistant/components/arcam_fmj/__init__.py @@ -13,17 +13,17 @@ from homeassistant.const import CONF_HOST, CONF_PORT, Platform from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import async_dispatcher_send -from homeassistant.helpers.typing import ConfigType from .const import ( DEFAULT_SCAN_INTERVAL, DOMAIN, - DOMAIN_DATA_ENTRIES, SIGNAL_CLIENT_DATA, SIGNAL_CLIENT_STARTED, SIGNAL_CLIENT_STOPPED, ) +type ArcamFmjConfigEntry = ConfigEntry[Client] + _LOGGER = logging.getLogger(__name__) CONFIG_SCHEMA = cv.removed(DOMAIN, raise_if_present=False) @@ -31,34 +31,21 @@ CONFIG_SCHEMA = cv.removed(DOMAIN, raise_if_present=False) PLATFORMS = [Platform.MEDIA_PLAYER] -async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: - """Set up the component.""" - hass.data[DOMAIN_DATA_ENTRIES] = {} - return True - - -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: ArcamFmjConfigEntry) -> bool: """Set up config entry.""" - entries = hass.data[DOMAIN_DATA_ENTRIES] - - client = Client(entry.data[CONF_HOST], entry.data[CONF_PORT]) - entries[entry.entry_id] = client + entry.runtime_data = Client(entry.data[CONF_HOST], entry.data[CONF_PORT]) entry.async_create_background_task( - hass, _run_client(hass, client, DEFAULT_SCAN_INTERVAL), "arcam_fmj" + hass, _run_client(hass, entry.runtime_data, DEFAULT_SCAN_INTERVAL), "arcam_fmj" ) await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) - return True async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Cleanup before removing config entry.""" - unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) - hass.data[DOMAIN_DATA_ENTRIES].pop(entry.entry_id) - - return unload_ok + return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) async def _run_client(hass: HomeAssistant, client: Client, interval: float) -> None: diff --git a/homeassistant/components/arcam_fmj/config_flow.py b/homeassistant/components/arcam_fmj/config_flow.py index a1aefc3a755..514445ea604 100644 --- a/homeassistant/components/arcam_fmj/config_flow.py +++ b/homeassistant/components/arcam_fmj/config_flow.py @@ -10,18 +10,11 @@ from arcam.fmj.utils import get_uniqueid_from_host, get_uniqueid_from_udn import voluptuous as vol from homeassistant.components import ssdp -from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_PORT -from homeassistant.core import HomeAssistant from homeassistant.helpers.aiohttp_client import async_get_clientsession -from .const import DEFAULT_NAME, DEFAULT_PORT, DOMAIN, DOMAIN_DATA_ENTRIES - - -def get_entry_client(hass: HomeAssistant, entry: ConfigEntry) -> Client: - """Retrieve client associated with a config entry.""" - client: Client = hass.data[DOMAIN_DATA_ENTRIES][entry.entry_id] - return client +from .const import DEFAULT_NAME, DEFAULT_PORT, DOMAIN class ArcamFmjFlowHandler(ConfigFlow, domain=DOMAIN): diff --git a/homeassistant/components/arcam_fmj/const.py b/homeassistant/components/arcam_fmj/const.py index 94e8f5a9ee1..7f62c78d56b 100644 --- a/homeassistant/components/arcam_fmj/const.py +++ b/homeassistant/components/arcam_fmj/const.py @@ -11,5 +11,3 @@ EVENT_TURN_ON = "arcam_fmj.turn_on" DEFAULT_PORT = 50000 DEFAULT_NAME = "Arcam FMJ" DEFAULT_SCAN_INTERVAL = 5 - -DOMAIN_DATA_ENTRIES = f"{DOMAIN}.entries" diff --git a/homeassistant/components/arcam_fmj/media_player.py b/homeassistant/components/arcam_fmj/media_player.py index 9865b459497..00b46a7024a 100644 --- a/homeassistant/components/arcam_fmj/media_player.py +++ b/homeassistant/components/arcam_fmj/media_player.py @@ -19,7 +19,6 @@ from homeassistant.components.media_player import ( MediaType, ) from homeassistant.components.media_player.errors import BrowseError -from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_ENTITY_ID from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import HomeAssistantError @@ -27,7 +26,7 @@ from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .config_flow import get_entry_client +from . import ArcamFmjConfigEntry from .const import ( DOMAIN, EVENT_TURN_ON, @@ -41,12 +40,12 @@ _LOGGER = logging.getLogger(__name__) async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: ArcamFmjConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up the configuration entry.""" - client = get_entry_client(hass, config_entry) + client = config_entry.runtime_data async_add_entities( [ diff --git a/tests/components/arcam_fmj/test_config_flow.py b/tests/components/arcam_fmj/test_config_flow.py index 8f80f5e7e04..60c68c5e102 100644 --- a/tests/components/arcam_fmj/test_config_flow.py +++ b/tests/components/arcam_fmj/test_config_flow.py @@ -8,8 +8,7 @@ from arcam.fmj.client import ConnectionFailed import pytest from homeassistant.components import ssdp -from homeassistant.components.arcam_fmj.config_flow import get_entry_client -from homeassistant.components.arcam_fmj.const import DOMAIN, DOMAIN_DATA_ENTRIES +from homeassistant.components.arcam_fmj.const import DOMAIN from homeassistant.config_entries import SOURCE_SSDP, SOURCE_USER from homeassistant.const import CONF_HOST, CONF_PORT, CONF_SOURCE from homeassistant.core import HomeAssistant @@ -215,12 +214,3 @@ async def test_user_wrong( assert result["type"] is FlowResultType.CREATE_ENTRY assert result["title"] == f"Arcam FMJ ({MOCK_HOST})" assert result["result"].unique_id is None - - -async def test_get_entry_client(hass: HomeAssistant) -> None: - """Test helper for configuration.""" - entry = MockConfigEntry( - domain=DOMAIN, data=MOCK_CONFIG_ENTRY, title=MOCK_NAME, unique_id=MOCK_UUID - ) - hass.data[DOMAIN_DATA_ENTRIES] = {entry.entry_id: "dummy"} - assert get_entry_client(hass, entry) == "dummy"