mirror of
https://github.com/home-assistant/core.git
synced 2026-09-26 01:11:51 -04:00
Use runtime_data in yamaha_musiccast (#168691)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user