From eb64589115f47ba8a61bc59dccedc599d63da41a Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 12 Apr 2026 18:45:37 +0200 Subject: [PATCH] Translate coordinator exceptions for Tailwind (#168027) --- .../components/tailwind/coordinator.py | 11 ++++++++++- .../components/tailwind/quality_scale.yaml | 5 +---- homeassistant/components/tailwind/strings.json | 3 +++ tests/components/tailwind/test_init.py | 18 ++++++++++++++++-- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/tailwind/coordinator.py b/homeassistant/components/tailwind/coordinator.py index 770751ccc3b..10daaec8ac9 100644 --- a/homeassistant/components/tailwind/coordinator.py +++ b/homeassistant/components/tailwind/coordinator.py @@ -5,6 +5,7 @@ from datetime import timedelta from gotailwind import ( Tailwind, TailwindAuthenticationError, + TailwindConnectionError, TailwindDeviceStatus, TailwindError, ) @@ -45,5 +46,13 @@ class TailwindDataUpdateCoordinator(DataUpdateCoordinator[TailwindDeviceStatus]) return await self.tailwind.status() except TailwindAuthenticationError as err: raise ConfigEntryAuthFailed from err + except TailwindConnectionError as err: + raise UpdateFailed( + translation_domain=DOMAIN, + translation_key="communication_error", + ) from err except TailwindError as err: - raise UpdateFailed(err) from err + raise UpdateFailed( + translation_domain=DOMAIN, + translation_key="unknown_error", + ) from err diff --git a/homeassistant/components/tailwind/quality_scale.yaml b/homeassistant/components/tailwind/quality_scale.yaml index 77d5d8711f4..595ef4a20e0 100644 --- a/homeassistant/components/tailwind/quality_scale.yaml +++ b/homeassistant/components/tailwind/quality_scale.yaml @@ -55,10 +55,7 @@ rules: entity-device-class: done entity-disabled-by-default: done entity-translations: done - exception-translations: - status: exempt - comment: | - The coordinator needs translation when the update failed. + exception-translations: done icon-translations: done reconfiguration-flow: done repair-issues: diff --git a/homeassistant/components/tailwind/strings.json b/homeassistant/components/tailwind/strings.json index 0e4850c701e..ca7aac47564 100644 --- a/homeassistant/components/tailwind/strings.json +++ b/homeassistant/components/tailwind/strings.json @@ -83,6 +83,9 @@ }, "door_locked_out": { "message": "The door is locked out and cannot be operated." + }, + "unknown_error": { + "message": "An unknown error occurred while communicating with the Tailwind device." } } } diff --git a/tests/components/tailwind/test_init.py b/tests/components/tailwind/test_init.py index 8e075a26279..6265345e6ca 100644 --- a/tests/components/tailwind/test_init.py +++ b/tests/components/tailwind/test_init.py @@ -2,7 +2,12 @@ from unittest.mock import MagicMock -from gotailwind import TailwindAuthenticationError, TailwindConnectionError +from gotailwind import ( + TailwindAuthenticationError, + TailwindConnectionError, + TailwindError, +) +import pytest from homeassistant.components.tailwind.const import DOMAIN from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntryState @@ -31,13 +36,22 @@ async def test_load_unload_config_entry( assert mock_config_entry.state is ConfigEntryState.NOT_LOADED +@pytest.mark.parametrize( + ("side_effect", "expected_translation_key"), + [ + (TailwindConnectionError, "communication_error"), + (TailwindError, "unknown_error"), + ], +) async def test_config_entry_not_ready( hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_tailwind: MagicMock, + side_effect: type[Exception], + expected_translation_key: str, ) -> None: """Test the Tailwind configuration entry not ready.""" - mock_tailwind.status.side_effect = TailwindConnectionError + mock_tailwind.status.side_effect = side_effect mock_config_entry.add_to_hass(hass) await hass.config_entries.async_setup(mock_config_entry.entry_id)