Improve raised exception consistency for media source (#66497)
This commit is contained in:
parent
80394e3de6
commit
707f112f51
4 changed files with 21 additions and 6 deletions
|
@ -102,7 +102,10 @@ async def async_browse_media(
|
||||||
if DOMAIN not in hass.data:
|
if DOMAIN not in hass.data:
|
||||||
raise BrowseError("Media Source not loaded")
|
raise BrowseError("Media Source not loaded")
|
||||||
|
|
||||||
item = await _get_media_item(hass, media_content_id).async_browse()
|
try:
|
||||||
|
item = await _get_media_item(hass, media_content_id).async_browse()
|
||||||
|
except ValueError as err:
|
||||||
|
raise BrowseError("Not a media source item") 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
|
||||||
|
@ -118,7 +121,13 @@ async def async_resolve_media(hass: HomeAssistant, media_content_id: str) -> Pla
|
||||||
"""Get info to play media."""
|
"""Get info to play media."""
|
||||||
if DOMAIN not in hass.data:
|
if DOMAIN not in hass.data:
|
||||||
raise Unresolvable("Media Source not loaded")
|
raise Unresolvable("Media Source not loaded")
|
||||||
return await _get_media_item(hass, media_content_id).async_resolve()
|
|
||||||
|
try:
|
||||||
|
item = _get_media_item(hass, media_content_id)
|
||||||
|
except ValueError as err:
|
||||||
|
raise Unresolvable("Not a media source item") from err
|
||||||
|
|
||||||
|
return await item.async_resolve()
|
||||||
|
|
||||||
|
|
||||||
@websocket_api.websocket_command(
|
@websocket_api.websocket_command(
|
||||||
|
|
|
@ -276,7 +276,7 @@ class UploadMediaView(HomeAssistantView):
|
||||||
|
|
||||||
uploaded_file: FileField = data["file"]
|
uploaded_file: FileField = data["file"]
|
||||||
|
|
||||||
if not uploaded_file.content_type.startswith(("image/", "video/")):
|
if not uploaded_file.content_type.startswith(("image/", "video/", "audio/")):
|
||||||
LOGGER.error("Content type not allowed")
|
LOGGER.error("Content type not allowed")
|
||||||
raise vol.Invalid("Only images and video are allowed")
|
raise vol.Invalid("Only images and video are allowed")
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ async def test_async_browse_media(hass):
|
||||||
media.children[0].title = "Epic Sax Guy 10 Hours"
|
media.children[0].title = "Epic Sax Guy 10 Hours"
|
||||||
|
|
||||||
# Test invalid media content
|
# Test invalid media content
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(BrowseError):
|
||||||
await media_source.async_browse_media(hass, "invalid")
|
await media_source.async_browse_media(hass, "invalid")
|
||||||
|
|
||||||
# Test base URI returns all domains
|
# Test base URI returns all domains
|
||||||
|
@ -80,6 +80,8 @@ async def test_async_resolve_media(hass):
|
||||||
media_source.generate_media_source_id(media_source.DOMAIN, "local/test.mp3"),
|
media_source.generate_media_source_id(media_source.DOMAIN, "local/test.mp3"),
|
||||||
)
|
)
|
||||||
assert isinstance(media, media_source.models.PlayMedia)
|
assert isinstance(media, media_source.models.PlayMedia)
|
||||||
|
assert media.url == "/media/local/test.mp3"
|
||||||
|
assert media.mime_type == "audio/mpeg"
|
||||||
|
|
||||||
|
|
||||||
async def test_async_unresolve_media(hass):
|
async def test_async_unresolve_media(hass):
|
||||||
|
@ -91,6 +93,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, "")
|
await media_source.async_resolve_media(hass, "")
|
||||||
|
|
||||||
|
# Test invalid media content
|
||||||
|
with pytest.raises(media_source.Unresolvable):
|
||||||
|
await media_source.async_resolve_media(hass, "invalid")
|
||||||
|
|
||||||
|
|
||||||
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."""
|
||||||
|
|
|
@ -52,9 +52,9 @@ async def test_async_browse_media(hass):
|
||||||
assert str(excinfo.value) == "Unknown source directory."
|
assert str(excinfo.value) == "Unknown source directory."
|
||||||
|
|
||||||
# Test invalid base
|
# Test invalid base
|
||||||
with pytest.raises(ValueError) 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) == "Invalid media source URI"
|
assert str(excinfo.value) == "Not a media source item"
|
||||||
|
|
||||||
# Test successful listing
|
# Test successful listing
|
||||||
media = await media_source.async_browse_media(
|
media = await media_source.async_browse_media(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue