mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 06:07:17 +00:00
Make backup listing more resilient for onedrive (#143010)
Co-authored-by: Erwin Douna <e.douna@gmail.com>
This commit is contained in:
parent
8a084599d8
commit
159e55296f
@ -235,8 +235,12 @@ class OneDriveBackupAgent(BackupAgent):
|
|||||||
|
|
||||||
items = await self._client.list_drive_items(self._folder_id)
|
items = await self._client.list_drive_items(self._folder_id)
|
||||||
|
|
||||||
async def download_backup_metadata(item_id: str) -> AgentBackup:
|
async def download_backup_metadata(item_id: str) -> AgentBackup | None:
|
||||||
|
try:
|
||||||
metadata_stream = await self._client.download_drive_item(item_id)
|
metadata_stream = await self._client.download_drive_item(item_id)
|
||||||
|
except OneDriveException as err:
|
||||||
|
_LOGGER.warning("Error downloading metadata for %s: %s", item_id, err)
|
||||||
|
return None
|
||||||
metadata_json = loads(await metadata_stream.read())
|
metadata_json = loads(await metadata_stream.read())
|
||||||
return AgentBackup.from_dict(metadata_json)
|
return AgentBackup.from_dict(metadata_json)
|
||||||
|
|
||||||
@ -246,6 +250,8 @@ class OneDriveBackupAgent(BackupAgent):
|
|||||||
metadata_description_json := unescape(item.description)
|
metadata_description_json := unescape(item.description)
|
||||||
):
|
):
|
||||||
backup = await download_backup_metadata(item.id)
|
backup = await download_backup_metadata(item.id)
|
||||||
|
if backup is None:
|
||||||
|
continue
|
||||||
metadata_description = loads(metadata_description_json)
|
metadata_description = loads(metadata_description_json)
|
||||||
backups[backup.backup_id] = OneDriveBackup(
|
backups[backup.backup_id] = OneDriveBackup(
|
||||||
backup=backup,
|
backup=backup,
|
||||||
|
@ -75,7 +75,6 @@ async def test_agents_info(
|
|||||||
async def test_agents_list_backups(
|
async def test_agents_list_backups(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
hass_ws_client: WebSocketGenerator,
|
hass_ws_client: WebSocketGenerator,
|
||||||
mock_config_entry: MockConfigEntry,
|
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test agent list backups."""
|
"""Test agent list backups."""
|
||||||
|
|
||||||
@ -105,6 +104,22 @@ async def test_agents_list_backups(
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
async def test_agents_list_backups_with_download_failure(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
hass_ws_client: WebSocketGenerator,
|
||||||
|
mock_onedrive_client: MagicMock,
|
||||||
|
) -> None:
|
||||||
|
"""Test agent list backups still works if one of the items fails to download."""
|
||||||
|
mock_onedrive_client.download_drive_item.side_effect = OneDriveException("test")
|
||||||
|
client = await hass_ws_client(hass)
|
||||||
|
await client.send_json_auto_id({"type": "backup/info"})
|
||||||
|
response = await client.receive_json()
|
||||||
|
|
||||||
|
assert response["success"]
|
||||||
|
assert response["result"]["agent_errors"] == {}
|
||||||
|
assert response["result"]["backups"] == []
|
||||||
|
|
||||||
|
|
||||||
async def test_agents_get_backup(
|
async def test_agents_get_backup(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
hass_ws_client: WebSocketGenerator,
|
hass_ws_client: WebSocketGenerator,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user