From fdf02cf65740fe0963e6c48d1ced42caa085febb Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Thu, 12 Feb 2026 22:32:22 +0100 Subject: [PATCH] Add missing exception translations in immich (#162889) --- homeassistant/components/immich/__init__.py | 10 ++++++++-- homeassistant/components/immich/coordinator.py | 11 +++++++++-- .../components/immich/media_source.py | 12 +++++++++--- .../components/immich/quality_scale.yaml | 2 +- homeassistant/components/immich/strings.json | 18 ++++++++++++++++++ tests/components/immich/test_media_source.py | 8 ++++---- 6 files changed, 49 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/immich/__init__.py b/homeassistant/components/immich/__init__.py index 996e4f3ad8c..9ef1d715f05 100644 --- a/homeassistant/components/immich/__init__.py +++ b/homeassistant/components/immich/__init__.py @@ -51,9 +51,15 @@ async def async_setup_entry(hass: HomeAssistant, entry: ImmichConfigEntry) -> bo try: user_info = await immich.users.async_get_my_user() except ImmichUnauthorizedError as err: - raise ConfigEntryAuthFailed from err + raise ConfigEntryAuthFailed( + translation_domain=DOMAIN, + translation_key="auth_error", + ) from err except CONNECT_ERRORS as err: - raise ConfigEntryNotReady from err + raise ConfigEntryNotReady( + translation_domain=DOMAIN, + translation_key="cannot_connect", + ) from err coordinator = ImmichDataUpdateCoordinator(hass, entry, immich, user_info.is_admin) await coordinator.async_config_entry_first_refresh() diff --git a/homeassistant/components/immich/coordinator.py b/homeassistant/components/immich/coordinator.py index eaa24ec94c1..0d56cd3619d 100644 --- a/homeassistant/components/immich/coordinator.py +++ b/homeassistant/components/immich/coordinator.py @@ -80,9 +80,16 @@ class ImmichDataUpdateCoordinator(DataUpdateCoordinator[ImmichData]): else None ) except ImmichUnauthorizedError as err: - raise ConfigEntryAuthFailed from err + raise ConfigEntryAuthFailed( + translation_domain=DOMAIN, + translation_key="auth_error", + ) from err except CONNECT_ERRORS as err: - raise UpdateFailed from err + raise UpdateFailed( + translation_domain=DOMAIN, + translation_key="update_error", + translation_placeholders={"error": repr(err)}, + ) from err return ImmichData( server_about, server_storage, server_usage, server_version_check diff --git a/homeassistant/components/immich/media_source.py b/homeassistant/components/immich/media_source.py index 8e824b100bc..e37172cb5e1 100644 --- a/homeassistant/components/immich/media_source.py +++ b/homeassistant/components/immich/media_source.py @@ -64,7 +64,9 @@ class ImmichMediaSource(MediaSource): ) -> BrowseMediaSource: """Return media.""" if not (entries := self.hass.config_entries.async_loaded_entries(DOMAIN)): - raise BrowseError("Immich is not configured") + raise BrowseError( + translation_domain=DOMAIN, translation_key="not_configured" + ) return BrowseMediaSource( domain=DOMAIN, identifier=None, @@ -282,12 +284,16 @@ class ImmichMediaSource(MediaSource): identifier = ImmichMediaSourceIdentifier(item.identifier) except IndexError as err: raise Unresolvable( - f"Could not parse identifier: {item.identifier}" + translation_domain=DOMAIN, + translation_key="identifier_unresolvable", + translation_placeholders={"identifier": item.identifier}, ) from err if identifier.mime_type is None: raise Unresolvable( - f"Could not resolve identifier that has no mime-type: {item.identifier}" + translation_domain=DOMAIN, + translation_key="identifier_no_mime_type_unresolvable", + translation_placeholders={"identifier": item.identifier}, ) return PlayMedia( diff --git a/homeassistant/components/immich/quality_scale.yaml b/homeassistant/components/immich/quality_scale.yaml index 2a6e5c33cc0..059327834a4 100644 --- a/homeassistant/components/immich/quality_scale.yaml +++ b/homeassistant/components/immich/quality_scale.yaml @@ -60,7 +60,7 @@ rules: entity-device-class: done entity-disabled-by-default: done entity-translations: done - exception-translations: todo + exception-translations: done icon-translations: done reconfiguration-flow: todo repair-issues: diff --git a/homeassistant/components/immich/strings.json b/homeassistant/components/immich/strings.json index 49b538e422d..e9cd24256b2 100644 --- a/homeassistant/components/immich/strings.json +++ b/homeassistant/components/immich/strings.json @@ -79,9 +79,27 @@ "album_not_found": { "message": "Album with ID `{album_id}` not found ({error})." }, + "auth_error": { + "message": "Authentication failed, please update your API key" + }, + "cannot_connect": { + "message": "Cannot connect to your Immich instance." + }, + "identifier_no_mime_type_unresolvable": { + "message": "Could not resolve identifier that has no mime-type: {identifier}" + }, + "identifier_unresolvable": { + "message": "Could not parse identifier: {identifier}" + }, + "not_configured": { + "message": "Immich is not configured." + }, "only_local_media_supported": { "message": "Only local media files are currently supported." }, + "update_error": { + "message": "An error occurred while retrieving data from your Immich instance: {error}" + }, "upload_failed": { "message": "Upload of file `{file}` failed ({error})." } diff --git a/tests/components/immich/test_media_source.py b/tests/components/immich/test_media_source.py index 5fe869bee42..2060b9c6a3a 100644 --- a/tests/components/immich/test_media_source.py +++ b/tests/components/immich/test_media_source.py @@ -37,14 +37,14 @@ async def test_get_media_source(hass: HomeAssistant) -> None: @pytest.mark.parametrize( ("identifier", "exception_msg"), [ - ("unique_id", "Could not resolve identifier that has no mime-type"), + ("unique_id", "identifier_no_mime_type_unresolvable"), ( "unique_id|albums|album_id", - "Could not resolve identifier that has no mime-type", + "identifier_no_mime_type_unresolvable", ), ( "unique_id|albums|album_id|asset_id|filename", - "Could not parse identifier", + "identifier_unresolvable", ), ], ) @@ -102,7 +102,7 @@ async def test_browse_media_unconfigured(hass: HomeAssistant) -> None: item = MediaSourceItem( hass, DOMAIN, "unique_id/albums/album_id/asset_id/filename.png", None ) - with pytest.raises(BrowseError, match="Immich is not configured"): + with pytest.raises(BrowseError, match="not_configured"): await source.async_browse_media(item)