mirror of
https://github.com/home-assistant/core.git
synced 2025-07-08 22:07:10 +00:00
Raise PlatformNotReady on initial OwnTone connection failure (#97257)
This commit is contained in:
parent
d78e39d568
commit
9282cb21ab
@ -18,9 +18,10 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
"""Remove forked-daapd component."""
|
"""Remove forked-daapd component."""
|
||||||
status = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
status = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
||||||
if status and hass.data.get(DOMAIN) and hass.data[DOMAIN].get(entry.entry_id):
|
if status and hass.data.get(DOMAIN) and hass.data[DOMAIN].get(entry.entry_id):
|
||||||
hass.data[DOMAIN][entry.entry_id][
|
if websocket_handler := hass.data[DOMAIN][entry.entry_id][
|
||||||
HASS_DATA_UPDATER_KEY
|
HASS_DATA_UPDATER_KEY
|
||||||
].websocket_handler.cancel()
|
].websocket_handler:
|
||||||
|
websocket_handler.cancel()
|
||||||
for remove_listener in hass.data[DOMAIN][entry.entry_id][
|
for remove_listener in hass.data[DOMAIN][entry.entry_id][
|
||||||
HASS_DATA_REMOVE_LISTENERS_KEY
|
HASS_DATA_REMOVE_LISTENERS_KEY
|
||||||
]:
|
]:
|
||||||
|
@ -31,6 +31,7 @@ from homeassistant.components.spotify import (
|
|||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT
|
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
|
from homeassistant.exceptions import PlatformNotReady
|
||||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||||
from homeassistant.helpers.dispatcher import (
|
from homeassistant.helpers.dispatcher import (
|
||||||
async_dispatcher_connect,
|
async_dispatcher_connect,
|
||||||
@ -127,10 +128,10 @@ async def async_setup_entry(
|
|||||||
forked_daapd_updater = ForkedDaapdUpdater(
|
forked_daapd_updater = ForkedDaapdUpdater(
|
||||||
hass, forked_daapd_api, config_entry.entry_id
|
hass, forked_daapd_api, config_entry.entry_id
|
||||||
)
|
)
|
||||||
await forked_daapd_updater.async_init()
|
|
||||||
hass.data[DOMAIN][config_entry.entry_id][
|
hass.data[DOMAIN][config_entry.entry_id][
|
||||||
HASS_DATA_UPDATER_KEY
|
HASS_DATA_UPDATER_KEY
|
||||||
] = forked_daapd_updater
|
] = forked_daapd_updater
|
||||||
|
await forked_daapd_updater.async_init()
|
||||||
|
|
||||||
|
|
||||||
async def update_listener(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
async def update_listener(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||||
@ -914,7 +915,8 @@ class ForkedDaapdUpdater:
|
|||||||
|
|
||||||
async def async_init(self):
|
async def async_init(self):
|
||||||
"""Perform async portion of class initialization."""
|
"""Perform async portion of class initialization."""
|
||||||
server_config = await self._api.get_request("config")
|
if not (server_config := await self._api.get_request("config")):
|
||||||
|
raise PlatformNotReady
|
||||||
if websocket_port := server_config.get("websocket_port"):
|
if websocket_port := server_config.get("websocket_port"):
|
||||||
self.websocket_handler = asyncio.create_task(
|
self.websocket_handler = asyncio.create_task(
|
||||||
self._api.start_websocket_handler(
|
self._api.start_websocket_handler(
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
"""The config flow tests for the forked_daapd media player platform."""
|
"""The config flow tests for the forked_daapd media player platform."""
|
||||||
from unittest.mock import AsyncMock, patch
|
from unittest.mock import AsyncMock, MagicMock, patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@ -12,9 +12,11 @@ from homeassistant.components.forked_daapd.const import (
|
|||||||
CONF_TTS_VOLUME,
|
CONF_TTS_VOLUME,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
)
|
)
|
||||||
|
from homeassistant.components.forked_daapd.media_player import async_setup_entry
|
||||||
from homeassistant.config_entries import SOURCE_USER, SOURCE_ZEROCONF
|
from homeassistant.config_entries import SOURCE_USER, SOURCE_ZEROCONF
|
||||||
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT
|
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.exceptions import PlatformNotReady
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
@ -242,3 +244,18 @@ async def test_options_flow(hass: HomeAssistant, config_entry) -> None:
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
assert result["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
||||||
|
|
||||||
|
|
||||||
|
async def test_async_setup_entry_not_ready(hass: HomeAssistant, config_entry) -> None:
|
||||||
|
"""Test that a PlatformNotReady exception is thrown during platform setup."""
|
||||||
|
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.forked_daapd.media_player.ForkedDaapdAPI",
|
||||||
|
autospec=True,
|
||||||
|
) as mock_api:
|
||||||
|
mock_api.return_value.get_request.return_value = None
|
||||||
|
config_entry.add_to_hass(hass)
|
||||||
|
with pytest.raises(PlatformNotReady):
|
||||||
|
await async_setup_entry(hass, config_entry, MagicMock())
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
mock_api.return_value.get_request.assert_called_once()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user