Make unknown media source exception translatable (#143208)

This commit is contained in:
J. Nick Koston 2025-04-18 01:17:56 -10:00 committed by GitHub
parent 45022752a0
commit 221a8597da
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 43 additions and 6 deletions

View File

@ -33,7 +33,7 @@ from .const import (
URI_SCHEME,
URI_SCHEME_REGEX,
)
from .error import MediaSourceError, Unresolvable
from .error import MediaSourceError, UnknownMediaSource, Unresolvable
from .models import BrowseMediaSource, MediaSource, MediaSourceItem, PlayMedia
__all__ = [
@ -113,7 +113,11 @@ def _get_media_item(
return MediaSourceItem(hass, domain, "", target_media_player)
if item.domain is not None and item.domain not in hass.data[DOMAIN]:
raise ValueError("Unknown media source")
raise UnknownMediaSource(
translation_domain=DOMAIN,
translation_key="unknown_media_source",
translation_placeholders={"domain": item.domain},
)
return item
@ -132,7 +136,14 @@ async def async_browse_media(
try:
item = await _get_media_item(hass, media_content_id, None).async_browse()
except ValueError as err:
raise BrowseError(str(err)) from err
raise BrowseError(
translation_domain=DOMAIN,
translation_key="browse_media_failed",
translation_placeholders={
"media_content_id": str(media_content_id),
"error": str(err),
},
) from err
if content_filter is None or item.children is None:
return item
@ -165,7 +176,14 @@ async def async_resolve_media(
try:
item = _get_media_item(hass, media_content_id, target_media_player)
except ValueError as err:
raise Unresolvable(str(err)) from err
raise Unresolvable(
translation_domain=DOMAIN,
translation_key="resolve_media_failed",
translation_placeholders={
"media_content_id": str(media_content_id),
"error": str(err),
},
) from err
return await item.async_resolve()

View File

@ -9,3 +9,7 @@ class MediaSourceError(HomeAssistantError):
class Unresolvable(MediaSourceError):
"""When media ID is not resolvable."""
class UnknownMediaSource(MediaSourceError, ValueError):
"""When media source is unknown."""

View File

@ -0,0 +1,13 @@
{
"exceptions": {
"browse_media_failed": {
"message": "Failed to browse media with content id {media_content_id}: {error}"
},
"resolve_media_failed": {
"message": "Failed to resolve media with content id {media_content_id}: {error}"
},
"unknown_media_source": {
"message": "Unknown media source: {domain}"
}
}
}

View File

@ -57,8 +57,10 @@ async def test_async_browse_media(hass: HomeAssistant) -> None:
# Test invalid base
with pytest.raises(BrowseError) as excinfo:
await async_browse_media(hass, f"{URI_SCHEME}{DOMAIN}/")
assert str(excinfo.value) == "Invalid media source URI"
assert str(excinfo.value) == (
"Failed to browse media with content id media-source://netatmo/: "
"Invalid media source URI"
)
# Test successful listing
media = await async_browse_media(hass, f"{URI_SCHEME}{DOMAIN}/events")