Add exception translations to Bring integration (#115547)
* Add exception translations * Add test for exceptions * Remove unnecessary logging
This commit is contained in:
parent
4955364948
commit
927ea14562
4 changed files with 78 additions and 18 deletions
|
@ -39,23 +39,19 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
await bring.load_lists()
|
await bring.load_lists()
|
||||||
except BringRequestException as e:
|
except BringRequestException as e:
|
||||||
raise ConfigEntryNotReady(
|
raise ConfigEntryNotReady(
|
||||||
f"Timeout while connecting for email '{email}'"
|
translation_domain=DOMAIN,
|
||||||
) from e
|
translation_key="setup_request_exception",
|
||||||
except BringAuthException as e:
|
|
||||||
_LOGGER.error(
|
|
||||||
"Authentication failed for '%s', check your email and password",
|
|
||||||
email,
|
|
||||||
)
|
|
||||||
raise ConfigEntryError(
|
|
||||||
f"Authentication failed for '{email}', check your email and password"
|
|
||||||
) from e
|
) from e
|
||||||
except BringParseException as e:
|
except BringParseException as e:
|
||||||
_LOGGER.error(
|
|
||||||
"Failed to parse request '%s', check your email and password",
|
|
||||||
email,
|
|
||||||
)
|
|
||||||
raise ConfigEntryNotReady(
|
raise ConfigEntryNotReady(
|
||||||
"Failed to parse response request from server, try again later"
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="setup_request_exception",
|
||||||
|
) from e
|
||||||
|
except BringAuthException as e:
|
||||||
|
raise ConfigEntryError(
|
||||||
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="setup_authentication_exception",
|
||||||
|
translation_placeholders={CONF_EMAIL: email},
|
||||||
) from e
|
) from e
|
||||||
|
|
||||||
coordinator = BringDataUpdateCoordinator(hass, bring)
|
coordinator = BringDataUpdateCoordinator(hass, bring)
|
||||||
|
|
|
@ -16,5 +16,28 @@
|
||||||
"abort": {
|
"abort": {
|
||||||
"already_configured": "[%key:common::config_flow::abort::already_configured_service%]"
|
"already_configured": "[%key:common::config_flow::abort::already_configured_service%]"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"exceptions": {
|
||||||
|
"todo_save_item_failed": {
|
||||||
|
"message": "Failed to save item {name} to Bring! list"
|
||||||
|
},
|
||||||
|
"todo_update_item_failed": {
|
||||||
|
"message": "Failed to update item {name} to Bring! list"
|
||||||
|
},
|
||||||
|
"todo_rename_item_failed": {
|
||||||
|
"message": "Failed to rename item {name} to Bring! list"
|
||||||
|
},
|
||||||
|
"todo_delete_item_failed": {
|
||||||
|
"message": "Failed to delete {count} item(s) from Bring! list"
|
||||||
|
},
|
||||||
|
"setup_request_exception": {
|
||||||
|
"message": "Failed to connect to server, try again later"
|
||||||
|
},
|
||||||
|
"setup_parse_exception": {
|
||||||
|
"message": "Failed to parse server response, try again later"
|
||||||
|
},
|
||||||
|
"setup_authentication_exception": {
|
||||||
|
"message": "Authentication failed for {email}, check your email and password"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,7 +112,11 @@ class BringTodoListEntity(
|
||||||
str(uuid.uuid4()),
|
str(uuid.uuid4()),
|
||||||
)
|
)
|
||||||
except BringRequestException as e:
|
except BringRequestException as e:
|
||||||
raise HomeAssistantError("Unable to save todo item for bring") from e
|
raise HomeAssistantError(
|
||||||
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="todo_save_item_failed",
|
||||||
|
translation_placeholders={"name": item.summary or ""},
|
||||||
|
) from e
|
||||||
|
|
||||||
await self.coordinator.async_refresh()
|
await self.coordinator.async_refresh()
|
||||||
|
|
||||||
|
@ -167,7 +171,11 @@ class BringTodoListEntity(
|
||||||
else BringItemOperation.COMPLETE,
|
else BringItemOperation.COMPLETE,
|
||||||
)
|
)
|
||||||
except BringRequestException as e:
|
except BringRequestException as e:
|
||||||
raise HomeAssistantError("Unable to update todo item for bring") from e
|
raise HomeAssistantError(
|
||||||
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="todo_update_item_failed",
|
||||||
|
translation_placeholders={"name": item.summary or ""},
|
||||||
|
) from e
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
await self.coordinator.bring.batch_update_list(
|
await self.coordinator.bring.batch_update_list(
|
||||||
|
@ -191,7 +199,11 @@ class BringTodoListEntity(
|
||||||
)
|
)
|
||||||
|
|
||||||
except BringRequestException as e:
|
except BringRequestException as e:
|
||||||
raise HomeAssistantError("Unable to replace todo item for bring") from e
|
raise HomeAssistantError(
|
||||||
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="todo_rename_item_failed",
|
||||||
|
translation_placeholders={"name": item.summary or ""},
|
||||||
|
) from e
|
||||||
|
|
||||||
await self.coordinator.async_refresh()
|
await self.coordinator.async_refresh()
|
||||||
|
|
||||||
|
@ -212,6 +224,10 @@ class BringTodoListEntity(
|
||||||
BringItemOperation.REMOVE,
|
BringItemOperation.REMOVE,
|
||||||
)
|
)
|
||||||
except BringRequestException as e:
|
except BringRequestException as e:
|
||||||
raise HomeAssistantError("Unable to delete todo item for bring") from e
|
raise HomeAssistantError(
|
||||||
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="todo_delete_item_failed",
|
||||||
|
translation_placeholders={"count": str(len(uids))},
|
||||||
|
) from e
|
||||||
|
|
||||||
await self.coordinator.async_refresh()
|
await self.coordinator.async_refresh()
|
||||||
|
|
|
@ -8,10 +8,12 @@ from homeassistant.components.bring import (
|
||||||
BringAuthException,
|
BringAuthException,
|
||||||
BringParseException,
|
BringParseException,
|
||||||
BringRequestException,
|
BringRequestException,
|
||||||
|
async_setup_entry,
|
||||||
)
|
)
|
||||||
from homeassistant.components.bring.const import DOMAIN
|
from homeassistant.components.bring.const import DOMAIN
|
||||||
from homeassistant.config_entries import ConfigEntryState
|
from homeassistant.config_entries import ConfigEntryState
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.exceptions import ConfigEntryError, ConfigEntryNotReady
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
|
@ -62,3 +64,26 @@ async def test_init_failure(
|
||||||
mock_bring_client.login.side_effect = exception
|
mock_bring_client.login.side_effect = exception
|
||||||
await setup_integration(hass, bring_config_entry)
|
await setup_integration(hass, bring_config_entry)
|
||||||
assert bring_config_entry.state == status
|
assert bring_config_entry.state == status
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("exception", "expected"),
|
||||||
|
[
|
||||||
|
(BringRequestException, ConfigEntryNotReady),
|
||||||
|
(BringAuthException, ConfigEntryError),
|
||||||
|
(BringParseException, ConfigEntryNotReady),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def test_init_exceptions(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
mock_bring_client: AsyncMock,
|
||||||
|
exception: Exception,
|
||||||
|
expected: Exception,
|
||||||
|
bring_config_entry: MockConfigEntry | None,
|
||||||
|
) -> None:
|
||||||
|
"""Test an initialization error on integration load."""
|
||||||
|
bring_config_entry.add_to_hass(hass)
|
||||||
|
mock_bring_client.login.side_effect = exception
|
||||||
|
|
||||||
|
with pytest.raises(expected):
|
||||||
|
await async_setup_entry(hass, bring_config_entry)
|
||||||
|
|
Loading…
Add table
Reference in a new issue