mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Media source to verify domain to avoid KeyError (#67137)
This commit is contained in:
parent
fff74c66ae
commit
a5383e40eb
@ -85,12 +85,17 @@ def _get_media_item(
|
|||||||
) -> MediaSourceItem:
|
) -> MediaSourceItem:
|
||||||
"""Return media item."""
|
"""Return media item."""
|
||||||
if media_content_id:
|
if media_content_id:
|
||||||
return MediaSourceItem.from_uri(hass, media_content_id)
|
item = MediaSourceItem.from_uri(hass, media_content_id)
|
||||||
|
else:
|
||||||
# We default to our own domain if its only one registered
|
# We default to our own domain if its only one registered
|
||||||
domain = None if len(hass.data[DOMAIN]) > 1 else DOMAIN
|
domain = None if len(hass.data[DOMAIN]) > 1 else DOMAIN
|
||||||
return MediaSourceItem(hass, domain, "")
|
return MediaSourceItem(hass, domain, "")
|
||||||
|
|
||||||
|
if item.domain is not None and item.domain not in hass.data[DOMAIN]:
|
||||||
|
raise ValueError("Unknown media source")
|
||||||
|
|
||||||
|
return item
|
||||||
|
|
||||||
|
|
||||||
@bind_hass
|
@bind_hass
|
||||||
async def async_browse_media(
|
async def async_browse_media(
|
||||||
@ -106,7 +111,7 @@ async def async_browse_media(
|
|||||||
try:
|
try:
|
||||||
item = await _get_media_item(hass, media_content_id).async_browse()
|
item = await _get_media_item(hass, media_content_id).async_browse()
|
||||||
except ValueError as err:
|
except ValueError as err:
|
||||||
raise BrowseError("Not a media source item") from err
|
raise BrowseError(str(err)) from err
|
||||||
|
|
||||||
if content_filter is None or item.children is None:
|
if content_filter is None or item.children is None:
|
||||||
return item
|
return item
|
||||||
@ -128,7 +133,7 @@ async def async_resolve_media(hass: HomeAssistant, media_content_id: str) -> Pla
|
|||||||
try:
|
try:
|
||||||
item = _get_media_item(hass, media_content_id)
|
item = _get_media_item(hass, media_content_id)
|
||||||
except ValueError as err:
|
except ValueError as err:
|
||||||
raise Unresolvable("Not a media source item") from err
|
raise Unresolvable(str(err)) from err
|
||||||
|
|
||||||
return await item.async_resolve()
|
return await item.async_resolve()
|
||||||
|
|
||||||
|
@ -98,6 +98,10 @@ async def test_async_unresolve_media(hass):
|
|||||||
with pytest.raises(media_source.Unresolvable):
|
with pytest.raises(media_source.Unresolvable):
|
||||||
await media_source.async_resolve_media(hass, "invalid")
|
await media_source.async_resolve_media(hass, "invalid")
|
||||||
|
|
||||||
|
# Test invalid media source
|
||||||
|
with pytest.raises(media_source.Unresolvable):
|
||||||
|
await media_source.async_resolve_media(hass, "media-source://media_source2")
|
||||||
|
|
||||||
|
|
||||||
async def test_websocket_browse_media(hass, hass_ws_client):
|
async def test_websocket_browse_media(hass, hass_ws_client):
|
||||||
"""Test browse media websocket."""
|
"""Test browse media websocket."""
|
||||||
|
@ -54,7 +54,7 @@ async def test_async_browse_media(hass):
|
|||||||
# Test invalid base
|
# Test invalid base
|
||||||
with pytest.raises(media_source.BrowseError) as excinfo:
|
with pytest.raises(media_source.BrowseError) as excinfo:
|
||||||
await media_source.async_browse_media(hass, f"{const.URI_SCHEME}{DOMAIN}/")
|
await media_source.async_browse_media(hass, f"{const.URI_SCHEME}{DOMAIN}/")
|
||||||
assert str(excinfo.value) == "Not a media source item"
|
assert str(excinfo.value) == "Invalid media source URI"
|
||||||
|
|
||||||
# Test successful listing
|
# Test successful listing
|
||||||
media = await media_source.async_browse_media(
|
media = await media_source.async_browse_media(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user