From 7ea7178aa91478d4e9437f8ea72ecb0c159a7ca2 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Fri, 3 Jan 2025 14:16:05 +0100 Subject: [PATCH] Simplify error handling when creating backup (#134528) --- homeassistant/components/backup/manager.py | 36 ++++++++-------------- 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/homeassistant/components/backup/manager.py b/homeassistant/components/backup/manager.py index 4d509003a218f..2fbd501484779 100644 --- a/homeassistant/components/backup/manager.py +++ b/homeassistant/components/backup/manager.py @@ -800,12 +800,10 @@ async def _async_finish_backup( """Finish a backup.""" if TYPE_CHECKING: assert self._backup_task is not None + backup_success = False try: written_backup = await self._backup_task except Exception as err: - self.async_on_backup_event( - CreateBackupEvent(stage=None, state=CreateBackupState.FAILED) - ) if with_automatic_settings: self._update_issue_backup_failed() @@ -831,33 +829,15 @@ async def _async_finish_backup( agent_ids=agent_ids, open_stream=written_backup.open_stream, ) - except BaseException: - self.async_on_backup_event( - CreateBackupEvent(stage=None, state=CreateBackupState.FAILED) - ) - raise # manager or unexpected error finally: - try: - await written_backup.release_stream() - except Exception: - self.async_on_backup_event( - CreateBackupEvent(stage=None, state=CreateBackupState.FAILED) - ) - raise + await written_backup.release_stream() self.known_backups.add(written_backup.backup, agent_errors) - if agent_errors: - self.async_on_backup_event( - CreateBackupEvent(stage=None, state=CreateBackupState.FAILED) - ) - else: + if not agent_errors: if with_automatic_settings: # create backup was successful, update last_completed_automatic_backup self.config.data.last_completed_automatic_backup = dt_util.now() self.store.save() - - self.async_on_backup_event( - CreateBackupEvent(stage=None, state=CreateBackupState.COMPLETED) - ) + backup_success = True if with_automatic_settings: self._update_issue_after_agent_upload(agent_errors) @@ -868,6 +848,14 @@ async def _async_finish_backup( finally: self._backup_task = None self._backup_finish_task = None + self.async_on_backup_event( + CreateBackupEvent( + stage=None, + state=CreateBackupState.COMPLETED + if backup_success + else CreateBackupState.FAILED, + ) + ) self.async_on_backup_event(IdleEvent()) async def async_restore_backup(