From ead9c4af387f98f9e29513ebf5fb0ce56d1fe158 Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Mon, 6 May 2024 17:54:44 +0200 Subject: [PATCH] Store runtime data inside the config entry in Radio Browser (#116821) --- .../components/radio_browser/__init__.py | 9 +++++---- .../components/radio_browser/media_source.py | 16 +++++----------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/homeassistant/components/radio_browser/__init__.py b/homeassistant/components/radio_browser/__init__.py index d1c2db3543a..91ce028920c 100644 --- a/homeassistant/components/radio_browser/__init__.py +++ b/homeassistant/components/radio_browser/__init__.py @@ -11,10 +11,12 @@ from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers.aiohttp_client import async_get_clientsession -from .const import DOMAIN +RadioBrowserConfigEntry = ConfigEntry[RadioBrowser] -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry( + hass: HomeAssistant, entry: RadioBrowserConfigEntry +) -> bool: """Set up Radio Browser from a config entry. This integration doesn't set up any entities, as it provides a media source @@ -28,11 +30,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: except (DNSError, RadioBrowserError) as err: raise ConfigEntryNotReady("Could not connect to Radio Browser API") from err - hass.data[DOMAIN] = radios + entry.runtime_data = radios return True async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Unload a config entry.""" - del hass.data[DOMAIN] return True diff --git a/homeassistant/components/radio_browser/media_source.py b/homeassistant/components/radio_browser/media_source.py index 5bf0b7f491b..d23d09cce3a 100644 --- a/homeassistant/components/radio_browser/media_source.py +++ b/homeassistant/components/radio_browser/media_source.py @@ -6,7 +6,7 @@ import mimetypes from radios import FilterBy, Order, RadioBrowser, Station -from homeassistant.components.media_player import BrowseError, MediaClass, MediaType +from homeassistant.components.media_player import MediaClass, MediaType from homeassistant.components.media_source.error import Unresolvable from homeassistant.components.media_source.models import ( BrowseMediaSource, @@ -14,9 +14,9 @@ from homeassistant.components.media_source.models import ( MediaSourceItem, PlayMedia, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback +from . import RadioBrowserConfigEntry from .const import DOMAIN CODEC_TO_MIMETYPE = { @@ -40,24 +40,21 @@ class RadioMediaSource(MediaSource): name = "Radio Browser" - def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None: + def __init__(self, hass: HomeAssistant, entry: RadioBrowserConfigEntry) -> None: """Initialize RadioMediaSource.""" super().__init__(DOMAIN) self.hass = hass self.entry = entry @property - def radios(self) -> RadioBrowser | None: + def radios(self) -> RadioBrowser: """Return the radio browser.""" - return self.hass.data.get(DOMAIN) + return self.entry.runtime_data async def async_resolve_media(self, item: MediaSourceItem) -> PlayMedia: """Resolve selected Radio station to a streaming URL.""" radios = self.radios - if radios is None: - raise Unresolvable("Radio Browser not initialized") - station = await radios.station(uuid=item.identifier) if not station: raise Unresolvable("Radio station is no longer available") @@ -77,9 +74,6 @@ class RadioMediaSource(MediaSource): """Return media.""" radios = self.radios - if radios is None: - raise BrowseError("Radio Browser not initialized") - return BrowseMediaSource( domain=DOMAIN, identifier=None,