From 66805818085944c050f7a869214628193db731bc Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 19 Nov 2024 19:48:01 +0100 Subject: [PATCH 1/4] Fix BackupManager.async_get_backup (#130975) --- homeassistant/components/backup/manager.py | 2 +- tests/components/backup/snapshots/test_websocket.ambr | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/backup/manager.py b/homeassistant/components/backup/manager.py index 72e625859fe..3b3cb618a54 100644 --- a/homeassistant/components/backup/manager.py +++ b/homeassistant/components/backup/manager.py @@ -320,7 +320,7 @@ class BackupManager: protected=result.protected, size=result.size, ) - backup.agent_ids.append(agent_ids[idx]) + backup.agent_ids.append(agent_ids[idx]) return (backup, agent_errors) diff --git a/tests/components/backup/snapshots/test_websocket.ambr b/tests/components/backup/snapshots/test_websocket.ambr index 09ae86bda25..7388ee81884 100644 --- a/tests/components/backup/snapshots/test_websocket.ambr +++ b/tests/components/backup/snapshots/test_websocket.ambr @@ -884,6 +884,7 @@ 'backup': dict({ 'agent_ids': list([ 'test.remote', + 'backup.local', ]), 'backup_id': 'abc123', 'date': '1970-01-01T00:00:00.000Z', From db76939114448f922242774be4cdec80a1ba6feb Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 19 Nov 2024 20:28:15 +0100 Subject: [PATCH 2/4] Fix typo in backup tests (#130978) --- tests/components/backup/test_manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/components/backup/test_manager.py b/tests/components/backup/test_manager.py index ec6e91c8f05..6dd62caae2e 100644 --- a/tests/components/backup/test_manager.py +++ b/tests/components/backup/test_manager.py @@ -426,7 +426,7 @@ async def test_not_loading_bad_platforms( assert "Loaded 0 platforms" in caplog.text -async def test_exception_plaform_pre( +async def test_exception_platform_pre( hass: HomeAssistant, mocked_json_bytes: Mock, mocked_tarfile: Mock ) -> None: """Test exception in pre step.""" @@ -449,7 +449,7 @@ async def test_exception_plaform_pre( await _mock_backup_generation(hass, manager, mocked_json_bytes, mocked_tarfile) -async def test_exception_plaform_post( +async def test_exception_platform_post( hass: HomeAssistant, mocked_json_bytes: Mock, mocked_tarfile: Mock ) -> None: """Test exception in post step.""" From b447476bcca92a8b97a3aece0e970e5337dc3fd1 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 19 Nov 2024 21:52:41 +0100 Subject: [PATCH 3/4] Adjust backup NewBackup class (#130976) --- homeassistant/components/backup/manager.py | 4 ++-- tests/components/backup/snapshots/test_websocket.ambr | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/backup/manager.py b/homeassistant/components/backup/manager.py index 3b3cb618a54..5b8586b828e 100644 --- a/homeassistant/components/backup/manager.py +++ b/homeassistant/components/backup/manager.py @@ -51,7 +51,7 @@ from .util import read_backup class NewBackup: """New backup class.""" - backup_id: str + backup_job_id: str @dataclass(slots=True) @@ -563,7 +563,7 @@ class CoreBackupReaderWriter(BackupReaderWriter): eager_start=False, # To ensure the task is not started before we return ) - return (NewBackup(backup_id=backup_id), backup_task) + return (NewBackup(backup_job_id=backup_id), backup_task) async def _async_create_backup( self, diff --git a/tests/components/backup/snapshots/test_websocket.ambr b/tests/components/backup/snapshots/test_websocket.ambr index 7388ee81884..647e0de6326 100644 --- a/tests/components/backup/snapshots/test_websocket.ambr +++ b/tests/components/backup/snapshots/test_websocket.ambr @@ -967,7 +967,7 @@ dict({ 'id': 1, 'result': dict({ - 'backup_id': '27f5c632', + 'backup_job_id': '27f5c632', }), 'success': True, 'type': 'result', @@ -988,7 +988,7 @@ dict({ 'id': 1, 'result': dict({ - 'backup_id': '27f5c632', + 'backup_job_id': '27f5c632', }), 'success': True, 'type': 'result', @@ -1009,7 +1009,7 @@ dict({ 'id': 1, 'result': dict({ - 'backup_id': '27f5c632', + 'backup_job_id': '27f5c632', }), 'success': True, 'type': 'result', @@ -1030,7 +1030,7 @@ dict({ 'id': 1, 'result': dict({ - 'backup_id': 'abc123', + 'backup_job_id': 'abc123', }), 'success': True, 'type': 'result', @@ -1040,7 +1040,7 @@ dict({ 'id': 1, 'result': dict({ - 'backup_id': 'abc123', + 'backup_job_id': 'abc123', }), 'success': True, 'type': 'result', From e08fe57bf354ebe60b8f522543fd161ed6c9cf99 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 19 Nov 2024 21:53:22 +0100 Subject: [PATCH 4/4] Remove class backup.BackupUploadMetadata (#130977) Remove class backup.BackupMetadata --- homeassistant/components/backup/__init__.py | 3 +-- homeassistant/components/backup/agent.py | 8 ++++--- homeassistant/components/backup/backup.py | 12 +++-------- homeassistant/components/backup/manager.py | 13 ++++-------- homeassistant/components/backup/models.py | 12 ----------- .../components/kitchen_sink/backup.py | 21 +++++-------------- tests/components/backup/common.py | 12 +++-------- 7 files changed, 21 insertions(+), 60 deletions(-) diff --git a/homeassistant/components/backup/__init__.py b/homeassistant/components/backup/__init__.py index 29dbe6f9e6a..c3e57e74dea 100644 --- a/homeassistant/components/backup/__init__.py +++ b/homeassistant/components/backup/__init__.py @@ -17,7 +17,7 @@ from .manager import ( BackupPlatformProtocol, CoreBackupReaderWriter, ) -from .models import BackupUploadMetadata, BaseBackup +from .models import BaseBackup from .websocket import async_register_websocket_handlers __all__ = [ @@ -25,7 +25,6 @@ __all__ = [ "BackupAgent", "BackupAgentPlatformProtocol", "BackupPlatformProtocol", - "BackupUploadMetadata", "BaseBackup", ] diff --git a/homeassistant/components/backup/agent.py b/homeassistant/components/backup/agent.py index 0913ef25896..c17712ca5b2 100644 --- a/homeassistant/components/backup/agent.py +++ b/homeassistant/components/backup/agent.py @@ -9,7 +9,7 @@ from typing import Any, Protocol from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError -from .models import BackupUploadMetadata, BaseBackup +from .models import BaseBackup class BackupAgentError(HomeAssistantError): @@ -46,13 +46,15 @@ class BackupAgent(abc.ABC): self, *, path: Path, - metadata: BackupUploadMetadata, + homeassistant_version: str, + backup: BaseBackup, **kwargs: Any, ) -> None: """Upload a backup. :param path: The full file path to the backup that should be uploaded. - :param metadata: Metadata about the backup that should be uploaded. + :param backup: Metadata about the backup that should be uploaded. + :param homeassistant_version: The version of Home Assistant that created the backup """ @abc.abstractmethod diff --git a/homeassistant/components/backup/backup.py b/homeassistant/components/backup/backup.py index ef4e2905589..7dad124c2f6 100644 --- a/homeassistant/components/backup/backup.py +++ b/homeassistant/components/backup/backup.py @@ -12,7 +12,7 @@ from homeassistant.helpers.hassio import is_hassio from .agent import BackupAgent, LocalBackupAgent from .const import LOGGER -from .models import BackupUploadMetadata, BaseBackup +from .models import BaseBackup from .util import read_backup @@ -78,17 +78,11 @@ class CoreLocalBackupAgent(LocalBackupAgent): self, *, path: Path, - metadata: BackupUploadMetadata, + backup: BaseBackup, **kwargs: Any, ) -> None: """Upload a backup.""" - self._backups[metadata.backup_id] = BaseBackup( - backup_id=metadata.backup_id, - date=metadata.date, - name=metadata.name, - protected=metadata.protected, - size=round(path.stat().st_size / 1_048_576, 2), - ) + self._backups[backup.backup_id] = backup async def async_list_backups(self, **kwargs: Any) -> list[BaseBackup]: """List backups.""" diff --git a/homeassistant/components/backup/manager.py b/homeassistant/components/backup/manager.py index 5b8586b828e..b1ea9cd1093 100644 --- a/homeassistant/components/backup/manager.py +++ b/homeassistant/components/backup/manager.py @@ -43,7 +43,7 @@ from .const import ( EXCLUDE_FROM_BACKUP, LOGGER, ) -from .models import BackupUploadMetadata, BaseBackup +from .models import BaseBackup from .util import read_backup @@ -226,20 +226,15 @@ class BackupManager: path: Path, ) -> None: """Upload a backup to selected agents.""" + LOGGER.warning("Uploading backup %s to agents %s", backup.backup_id, agent_ids) self.syncing = True try: sync_backup_results = await asyncio.gather( *( self.backup_agents[agent_id].async_upload_backup( path=path, - metadata=BackupUploadMetadata( - backup_id=backup.backup_id, - date=backup.date, - homeassistant=HAVERSION, - name=backup.name, - protected=backup.protected, - size=backup.size, - ), + backup=backup, + homeassistant_version=HAVERSION, ) for agent_id in agent_ids ), diff --git a/homeassistant/components/backup/models.py b/homeassistant/components/backup/models.py index f9a913affde..0ac2727983f 100644 --- a/homeassistant/components/backup/models.py +++ b/homeassistant/components/backup/models.py @@ -16,15 +16,3 @@ class BaseBackup: def as_dict(self) -> dict: """Return a dict representation of this backup.""" return asdict(self) - - -@dataclass() -class BackupUploadMetadata: - """Backup upload metadata.""" - - backup_id: str # The ID of the backup - date: str # The date the backup was created - homeassistant: str # The version of Home Assistant that created the backup - name: str # The name of the backup - protected: bool # If the backup is protected - size: float # The size of the backup (in bytes) diff --git a/homeassistant/components/kitchen_sink/backup.py b/homeassistant/components/kitchen_sink/backup.py index 51e14a1a074..a5f045d5c24 100644 --- a/homeassistant/components/kitchen_sink/backup.py +++ b/homeassistant/components/kitchen_sink/backup.py @@ -6,11 +6,7 @@ import logging from pathlib import Path from typing import Any -from homeassistant.components.backup import ( - BackupAgent, - BackupUploadMetadata, - BaseBackup, -) +from homeassistant.components.backup import BackupAgent, BaseBackup from homeassistant.core import HomeAssistant LOGGER = logging.getLogger(__name__) @@ -54,20 +50,13 @@ class KitchenSinkBackupAgent(BackupAgent): self, *, path: Path, - metadata: BackupUploadMetadata, + backup: BaseBackup, + homeassistant_version: str, **kwargs: Any, ) -> None: """Upload a backup.""" - LOGGER.info("Uploading backup %s %s", path.name, metadata) - self._uploads.append( - BaseBackup( - backup_id=metadata.backup_id, - date=metadata.date, - name=metadata.name, - protected=metadata.protected, - size=metadata.size, - ) - ) + LOGGER.info("Uploading backup %s %s", path.name, backup) + self._uploads.append(backup) async def async_delete_backup( self, diff --git a/tests/components/backup/common.py b/tests/components/backup/common.py index 80c2b73a3de..01164acae7a 100644 --- a/tests/components/backup/common.py +++ b/tests/components/backup/common.py @@ -10,7 +10,6 @@ from homeassistant.components.backup import ( DOMAIN, BackupAgent, BackupAgentPlatformProtocol, - BackupUploadMetadata, BaseBackup, ) from homeassistant.components.backup.const import DATA_MANAGER @@ -75,17 +74,12 @@ class BackupAgentTest(BackupAgent): self, *, path: Path, - metadata: BackupUploadMetadata, + backup: BaseBackup, + homeassistant_version: str, **kwargs: Any, ) -> None: """Upload a backup.""" - self._backups[metadata.backup_id] = BaseBackup( - backup_id=metadata.backup_id, - date=metadata.date, - name=metadata.name, - protected=metadata.protected, - size=metadata.size, - ) + self._backups[backup.backup_id] = backup async def async_list_backups(self, **kwargs: Any) -> list[BaseBackup]: """List backups."""