From e620426002ef7213f6008be428256c86e339b096 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 21 Apr 2026 11:33:02 +0200 Subject: [PATCH] Use runtime_data in yamaha_musiccast (#168691) --- .../components/yamaha_musiccast/__init__.py | 17 +++++++---------- .../components/yamaha_musiccast/coordinator.py | 9 +++++++-- .../components/yamaha_musiccast/media_player.py | 14 ++++++++------ .../components/yamaha_musiccast/number.py | 8 +++----- .../components/yamaha_musiccast/select.py | 9 ++++----- .../components/yamaha_musiccast/switch.py | 8 +++----- 6 files changed, 32 insertions(+), 33 deletions(-) diff --git a/homeassistant/components/yamaha_musiccast/__init__.py b/homeassistant/components/yamaha_musiccast/__init__.py index edc124890c53..38ff3a982893 100644 --- a/homeassistant/components/yamaha_musiccast/__init__.py +++ b/homeassistant/components/yamaha_musiccast/__init__.py @@ -8,13 +8,12 @@ from aiohttp import DummyCookieJar from aiomusiccast.musiccast_device import MusicCastDevice from homeassistant.components import ssdp -from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_HOST, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers.aiohttp_client import async_create_clientsession -from .const import CONF_SERIAL, CONF_UPNP_DESC, DOMAIN -from .coordinator import MusicCastDataUpdateCoordinator +from .const import CONF_SERIAL, CONF_UPNP_DESC +from .coordinator import MusicCastConfigEntry, MusicCastDataUpdateCoordinator PLATFORMS = [Platform.MEDIA_PLAYER, Platform.NUMBER, Platform.SELECT, Platform.SWITCH] @@ -38,7 +37,7 @@ async def get_upnp_desc(hass: HomeAssistant, host: str): return upnp_desc -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: MusicCastConfigEntry) -> bool: """Set up MusicCast from a config entry.""" if entry.data.get(CONF_UPNP_DESC) is None: @@ -60,8 +59,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: await coordinator.async_config_entry_first_refresh() coordinator.musiccast.build_capabilities() - hass.data.setdefault(DOMAIN, {}) - hass.data[DOMAIN][entry.entry_id] = coordinator + entry.runtime_data = coordinator await coordinator.musiccast.device.enable_polling() @@ -71,16 +69,15 @@ 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: MusicCastConfigEntry) -> bool: """Unload a config entry.""" unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) if unload_ok: - hass.data[DOMAIN][entry.entry_id].musiccast.device.disable_polling() - hass.data[DOMAIN].pop(entry.entry_id) + entry.runtime_data.musiccast.device.disable_polling() return unload_ok -async def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry) -> None: +async def async_reload_entry(hass: HomeAssistant, entry: MusicCastConfigEntry) -> None: """Reload config entry.""" await hass.config_entries.async_reload(entry.entry_id) diff --git a/homeassistant/components/yamaha_musiccast/coordinator.py b/homeassistant/components/yamaha_musiccast/coordinator.py index 13afbe3aa5e7..eae559faac68 100644 --- a/homeassistant/components/yamaha_musiccast/coordinator.py +++ b/homeassistant/components/yamaha_musiccast/coordinator.py @@ -22,14 +22,19 @@ _LOGGER = logging.getLogger(__name__) SCAN_INTERVAL = timedelta(seconds=60) +type MusicCastConfigEntry = ConfigEntry[MusicCastDataUpdateCoordinator] + class MusicCastDataUpdateCoordinator(DataUpdateCoordinator[MusicCastData]): """Class to manage fetching data from the API.""" - config_entry: ConfigEntry + config_entry: MusicCastConfigEntry def __init__( - self, hass: HomeAssistant, config_entry: ConfigEntry, client: MusicCastDevice + self, + hass: HomeAssistant, + config_entry: MusicCastConfigEntry, + client: MusicCastDevice, ) -> None: """Initialize.""" self.musiccast = client diff --git a/homeassistant/components/yamaha_musiccast/media_player.py b/homeassistant/components/yamaha_musiccast/media_player.py index 33fb32fffa15..e0b17f57dc5b 100644 --- a/homeassistant/components/yamaha_musiccast/media_player.py +++ b/homeassistant/components/yamaha_musiccast/media_player.py @@ -21,7 +21,6 @@ from homeassistant.components.media_player import ( RepeatMode, async_process_play_media_url, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity import Entity @@ -38,7 +37,7 @@ from .const import ( MEDIA_CLASS_MAPPING, NULL_GROUP, ) -from .coordinator import MusicCastDataUpdateCoordinator +from .coordinator import MusicCastConfigEntry from .entity import MusicCastDeviceEntity _LOGGER = logging.getLogger(__name__) @@ -55,11 +54,11 @@ MUSIC_PLAYER_BASE_SUPPORT = ( async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: MusicCastConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up MusicCast sensor based on a config entry.""" - coordinator: MusicCastDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data name = coordinator.data.network_name @@ -614,11 +613,14 @@ class MusicCastMediaPlayer(MusicCastDeviceEntity, MediaPlayerEntity): def get_all_mc_entities(self) -> list[MusicCastMediaPlayer]: """Return all media player entities of the musiccast system.""" + entries: list[MusicCastConfigEntry] = ( + self.hass.config_entries.async_loaded_entries(DOMAIN) + ) entities = [] - for coordinator in self.hass.data[DOMAIN].values(): + for entry in entries: entities += [ entity - for entity in coordinator.entities + for entity in entry.runtime_data.entities if isinstance(entity, MusicCastMediaPlayer) ] return entities diff --git a/homeassistant/components/yamaha_musiccast/number.py b/homeassistant/components/yamaha_musiccast/number.py index 0de14ef142d4..390361448ddb 100644 --- a/homeassistant/components/yamaha_musiccast/number.py +++ b/homeassistant/components/yamaha_musiccast/number.py @@ -5,22 +5,20 @@ from __future__ import annotations from aiomusiccast.capabilities import NumberSetter from homeassistant.components.number import NumberEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from .const import DOMAIN -from .coordinator import MusicCastDataUpdateCoordinator +from .coordinator import MusicCastConfigEntry, MusicCastDataUpdateCoordinator from .entity import MusicCastCapabilityEntity async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: MusicCastConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up MusicCast number entities based on a config entry.""" - coordinator: MusicCastDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data number_entities = [ NumberCapability(coordinator, capability) diff --git a/homeassistant/components/yamaha_musiccast/select.py b/homeassistant/components/yamaha_musiccast/select.py index 133cb4c4d7b5..16c236f7a701 100644 --- a/homeassistant/components/yamaha_musiccast/select.py +++ b/homeassistant/components/yamaha_musiccast/select.py @@ -5,22 +5,21 @@ from __future__ import annotations from aiomusiccast.capabilities import OptionSetter from homeassistant.components.select import SelectEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from .const import DOMAIN, TRANSLATION_KEY_MAPPING -from .coordinator import MusicCastDataUpdateCoordinator +from .const import TRANSLATION_KEY_MAPPING +from .coordinator import MusicCastConfigEntry, MusicCastDataUpdateCoordinator from .entity import MusicCastCapabilityEntity async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: MusicCastConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up MusicCast select entities based on a config entry.""" - coordinator: MusicCastDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data select_entities = [ SelectableCapability(coordinator, capability) diff --git a/homeassistant/components/yamaha_musiccast/switch.py b/homeassistant/components/yamaha_musiccast/switch.py index 148f09930f3f..4506fe5b48ea 100644 --- a/homeassistant/components/yamaha_musiccast/switch.py +++ b/homeassistant/components/yamaha_musiccast/switch.py @@ -5,22 +5,20 @@ from typing import Any from aiomusiccast.capabilities import BinarySetter from homeassistant.components.switch import SwitchEntity -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from .const import DOMAIN -from .coordinator import MusicCastDataUpdateCoordinator +from .coordinator import MusicCastConfigEntry from .entity import MusicCastCapabilityEntity async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: MusicCastConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up MusicCast sensor based on a config entry.""" - coordinator: MusicCastDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data switch_entities = [ SwitchCapability(coordinator, capability)