Add flag to backup store to track backup wizard completion (#138368)

* Add flag to backup store to track backup wizard completion

* Add comment

* Update hassio tests

* Update tests

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
Erik Montnemery 2025-02-24 17:14:47 +01:00 committed by GitHub
parent 377da5f954
commit 351e594fe4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 658 additions and 21 deletions

View File

@ -39,6 +39,7 @@ class StoredBackupConfig(TypedDict):
"""Represent the stored backup config."""
agents: dict[str, StoredAgentConfig]
automatic_backups_configured: bool
create_backup: StoredCreateBackupConfig
last_attempted_automatic_backup: str | None
last_completed_automatic_backup: str | None
@ -51,6 +52,7 @@ class BackupConfigData:
"""Represent loaded backup config data."""
agents: dict[str, AgentConfig]
automatic_backups_configured: bool # only used by frontend
create_backup: CreateBackupConfig
last_attempted_automatic_backup: datetime | None = None
last_completed_automatic_backup: datetime | None = None
@ -88,6 +90,7 @@ class BackupConfigData:
agent_id: AgentConfig(protected=agent_data["protected"])
for agent_id, agent_data in data["agents"].items()
},
automatic_backups_configured=data["automatic_backups_configured"],
create_backup=CreateBackupConfig(
agent_ids=data["create_backup"]["agent_ids"],
include_addons=data["create_backup"]["include_addons"],
@ -127,6 +130,7 @@ class BackupConfigData:
agents={
agent_id: agent.to_dict() for agent_id, agent in self.agents.items()
},
automatic_backups_configured=self.automatic_backups_configured,
create_backup=self.create_backup.to_dict(),
last_attempted_automatic_backup=last_attempted,
last_completed_automatic_backup=last_completed,
@ -142,6 +146,7 @@ class BackupConfig:
"""Initialize backup config."""
self.data = BackupConfigData(
agents={},
automatic_backups_configured=False,
create_backup=CreateBackupConfig(),
retention=RetentionConfig(),
schedule=BackupSchedule(),
@ -159,6 +164,7 @@ class BackupConfig:
self,
*,
agents: dict[str, AgentParametersDict] | UndefinedType = UNDEFINED,
automatic_backups_configured: bool | UndefinedType = UNDEFINED,
create_backup: CreateBackupParametersDict | UndefinedType = UNDEFINED,
retention: RetentionParametersDict | UndefinedType = UNDEFINED,
schedule: ScheduleParametersDict | UndefinedType = UNDEFINED,
@ -172,6 +178,8 @@ class BackupConfig:
self.data.agents[agent_id] = replace(
self.data.agents[agent_id], **agent_config
)
if automatic_backups_configured is not UNDEFINED:
self.data.automatic_backups_configured = automatic_backups_configured
if create_backup is not UNDEFINED:
self.data.create_backup = replace(self.data.create_backup, **create_backup)
if retention is not UNDEFINED:

View File

@ -16,7 +16,7 @@ if TYPE_CHECKING:
STORE_DELAY_SAVE = 30
STORAGE_KEY = DOMAIN
STORAGE_VERSION = 1
STORAGE_VERSION_MINOR = 4
STORAGE_VERSION_MINOR = 5
class StoredBackupData(TypedDict):
@ -67,6 +67,11 @@ class _BackupStore(Store[StoredBackupData]):
data["config"]["retention"]["copies"] = None
if data["config"]["retention"]["days"] == 0:
data["config"]["retention"]["days"] = None
if old_minor_version < 5:
# Version 1.5 adds automatic_backups_configured
data["config"]["automatic_backups_configured"] = (
data["config"]["create_backup"]["password"] is not None
)
# Note: We allow reading data with major version 2.
# Reject if major version is higher than 2.

View File

@ -352,6 +352,7 @@ async def handle_config_info(
{
vol.Required("type"): "backup/config/update",
vol.Optional("agents"): vol.Schema({str: {"protected": bool}}),
vol.Optional("automatic_backups_configured"): bool,
vol.Optional("create_backup"): vol.Schema(
{
vol.Optional("agent_ids"): vol.All([str], vol.Unique()),

View File

@ -13,6 +13,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -39,7 +40,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -57,6 +58,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -84,7 +86,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -102,6 +104,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -128,7 +131,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -146,6 +149,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -173,7 +177,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -194,6 +198,7 @@
'protected': True,
}),
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -220,7 +225,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -241,6 +246,7 @@
'protected': True,
}),
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -268,7 +274,201 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
# name: test_store_migration[store_data3]
dict({
'data': dict({
'backups': list([
dict({
'backup_id': 'abc123',
'failed_agent_ids': list([
'test.remote',
]),
}),
]),
'config': dict({
'agents': dict({
'test.remote': dict({
'protected': True,
}),
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'days': list([
]),
'recurrence': 'never',
'state': 'never',
'time': None,
}),
}),
}),
'key': 'backup',
'minor_version': 5,
'version': 1,
})
# ---
# name: test_store_migration[store_data3].1
dict({
'data': dict({
'backups': list([
dict({
'backup_id': 'abc123',
'failed_agent_ids': list([
'test.remote',
]),
}),
]),
'config': dict({
'agents': dict({
'test.remote': dict({
'protected': True,
}),
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'days': list([
]),
'recurrence': 'never',
'state': 'never',
'time': None,
}),
}),
}),
'key': 'backup',
'minor_version': 5,
'version': 1,
})
# ---
# name: test_store_migration[store_data4]
dict({
'data': dict({
'backups': list([
dict({
'backup_id': 'abc123',
'failed_agent_ids': list([
'test.remote',
]),
}),
]),
'config': dict({
'agents': dict({
'test.remote': dict({
'protected': True,
}),
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': 'hunter2',
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'days': list([
]),
'recurrence': 'never',
'state': 'never',
'time': None,
}),
}),
}),
'key': 'backup',
'minor_version': 5,
'version': 1,
})
# ---
# name: test_store_migration[store_data4].1
dict({
'data': dict({
'backups': list([
dict({
'backup_id': 'abc123',
'failed_agent_ids': list([
'test.remote',
]),
}),
]),
'config': dict({
'agents': dict({
'test.remote': dict({
'protected': True,
}),
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
'test-agent',
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': 'hunter2',
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'days': list([
]),
'recurrence': 'never',
'state': 'never',
'time': None,
}),
}),
}),
'key': 'backup',
'minor_version': 5,
'version': 1,
})
# ---

View File

@ -258,6 +258,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -295,6 +296,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -344,6 +346,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -382,6 +385,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -420,6 +424,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -459,6 +464,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -497,6 +503,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -543,6 +550,7 @@
'protected': False,
}),
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -583,6 +591,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
'hassio.local',
@ -623,6 +632,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
'hassio.local',
@ -662,6 +672,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -699,6 +710,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -744,6 +756,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -782,6 +795,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -820,6 +834,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -859,6 +874,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -897,6 +913,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -943,6 +960,7 @@
'protected': False,
}),
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -983,6 +1001,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
'backup.local',
@ -1022,6 +1041,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
'backup.local',
@ -1061,6 +1081,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1098,6 +1119,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -1137,6 +1159,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -1164,7 +1187,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -1175,6 +1198,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1212,6 +1236,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -1251,6 +1276,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -1278,7 +1304,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -1289,6 +1315,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1326,6 +1353,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -1365,6 +1393,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -1392,7 +1421,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -1403,6 +1432,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1446,6 +1476,7 @@
'protected': False,
}),
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1490,6 +1521,7 @@
'protected': False,
}),
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1516,7 +1548,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -1527,6 +1559,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1570,6 +1603,7 @@
'protected': False,
}),
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1613,6 +1647,7 @@
'protected': True,
}),
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1657,6 +1692,7 @@
'protected': True,
}),
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1683,7 +1719,237 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
# name: test_config_update[commands14]
dict({
'id': 1,
'result': dict({
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'next_automatic_backup': None,
'next_automatic_backup_additional': False,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'days': list([
]),
'recurrence': 'never',
'time': None,
}),
}),
}),
'success': True,
'type': 'result',
})
# ---
# name: test_config_update[commands14].1
dict({
'id': 3,
'result': dict({
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'next_automatic_backup': None,
'next_automatic_backup_additional': False,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'days': list([
]),
'recurrence': 'never',
'time': None,
}),
}),
}),
'success': True,
'type': 'result',
})
# ---
# name: test_config_update[commands14].2
dict({
'data': dict({
'backups': list([
]),
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'days': list([
]),
'recurrence': 'never',
'state': 'never',
'time': None,
}),
}),
}),
'key': 'backup',
'minor_version': 5,
'version': 1,
})
# ---
# name: test_config_update[commands15]
dict({
'id': 1,
'result': dict({
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'next_automatic_backup': None,
'next_automatic_backup_additional': False,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'days': list([
]),
'recurrence': 'never',
'time': None,
}),
}),
}),
'success': True,
'type': 'result',
})
# ---
# name: test_config_update[commands15].1
dict({
'id': 3,
'result': dict({
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'next_automatic_backup': None,
'next_automatic_backup_additional': False,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'days': list([
]),
'recurrence': 'never',
'time': None,
}),
}),
}),
'success': True,
'type': 'result',
})
# ---
# name: test_config_update[commands15].2
dict({
'data': dict({
'backups': list([
]),
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
]),
'include_addons': None,
'include_all_addons': False,
'include_database': True,
'include_folders': None,
'name': None,
'password': None,
}),
'last_attempted_automatic_backup': None,
'last_completed_automatic_backup': None,
'retention': dict({
'copies': None,
'days': None,
}),
'schedule': dict({
'days': list([
]),
'recurrence': 'never',
'state': 'never',
'time': None,
}),
}),
}),
'key': 'backup',
'minor_version': 5,
'version': 1,
})
# ---
@ -1694,6 +1960,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1731,6 +1998,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -1770,6 +2038,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -1797,7 +2066,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -1808,6 +2077,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1845,6 +2115,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -1885,6 +2156,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -1913,7 +2185,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -1924,6 +2196,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -1961,6 +2234,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2000,6 +2274,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2027,7 +2302,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -2038,6 +2313,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2075,6 +2351,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2116,6 +2393,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2145,7 +2423,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -2156,6 +2434,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2193,6 +2472,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2236,6 +2516,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2267,7 +2548,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -2278,6 +2559,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2315,6 +2597,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2354,6 +2637,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2381,7 +2665,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -2392,6 +2676,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2429,6 +2714,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2468,6 +2754,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2495,7 +2782,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -2506,6 +2793,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2543,6 +2831,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2582,6 +2871,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2609,7 +2899,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -2620,6 +2910,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2657,6 +2948,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2696,6 +2988,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
'test-agent',
@ -2723,7 +3016,7 @@
}),
}),
'key': 'backup',
'minor_version': 4,
'minor_version': 5,
'version': 1,
})
# ---
@ -2734,6 +3027,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2771,6 +3065,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2808,6 +3103,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2845,6 +3141,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2882,6 +3179,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2919,6 +3217,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2956,6 +3255,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -2993,6 +3293,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3030,6 +3331,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3067,6 +3369,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3104,6 +3407,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3141,6 +3445,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3178,6 +3483,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3215,6 +3521,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3252,6 +3559,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3289,6 +3597,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3326,6 +3635,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3363,6 +3673,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3400,6 +3711,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3437,6 +3749,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3474,6 +3787,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3511,6 +3825,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3548,6 +3863,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -3585,6 +3901,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),

View File

@ -99,6 +99,7 @@ def mock_delay_save() -> Generator[None]:
],
"config": {
"agents": {"test.remote": {"protected": True}},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": [],
"include_addons": None,
@ -125,6 +126,80 @@ def mock_delay_save() -> Generator[None]:
"key": DOMAIN,
"version": 2,
},
{
"data": {
"backups": [
{
"backup_id": "abc123",
"failed_agent_ids": ["test.remote"],
}
],
"config": {
"agents": {"test.remote": {"protected": True}},
"create_backup": {
"agent_ids": [],
"include_addons": None,
"include_all_addons": False,
"include_database": True,
"include_folders": None,
"name": None,
"password": None,
},
"last_attempted_automatic_backup": None,
"last_completed_automatic_backup": None,
"retention": {
"copies": None,
"days": None,
},
"schedule": {
"days": [],
"recurrence": "never",
"state": "never",
"time": None,
},
},
},
"key": DOMAIN,
"minor_version": 4,
"version": 1,
},
{
"data": {
"backups": [
{
"backup_id": "abc123",
"failed_agent_ids": ["test.remote"],
}
],
"config": {
"agents": {"test.remote": {"protected": True}},
"create_backup": {
"agent_ids": [],
"include_addons": None,
"include_all_addons": False,
"include_database": True,
"include_folders": None,
"name": None,
"password": "hunter2",
},
"last_attempted_automatic_backup": None,
"last_completed_automatic_backup": None,
"retention": {
"copies": None,
"days": None,
},
"schedule": {
"days": [],
"recurrence": "never",
"state": "never",
"time": None,
},
},
},
"key": DOMAIN,
"minor_version": 4,
"version": 1,
},
],
)
async def test_store_migration(

View File

@ -55,6 +55,7 @@ DEFAULT_STORAGE_DATA: dict[str, Any] = {
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": [],
"include_addons": None,
@ -907,6 +908,7 @@ async def test_agents_info(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": ["test-agent"],
"include_addons": ["test-addon"],
@ -938,6 +940,7 @@ async def test_agents_info(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": True,
"create_backup": {
"agent_ids": ["test-agent"],
"include_addons": None,
@ -969,6 +972,7 @@ async def test_agents_info(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": ["test-agent"],
"include_addons": None,
@ -1000,6 +1004,7 @@ async def test_agents_info(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": ["test-agent"],
"include_addons": None,
@ -1031,6 +1036,7 @@ async def test_agents_info(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": ["test-agent"],
"include_addons": None,
@ -1062,6 +1068,7 @@ async def test_agents_info(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": ["test-agent"],
"include_addons": None,
@ -1096,6 +1103,7 @@ async def test_agents_info(
"test-agent1": {"protected": True},
"test-agent2": {"protected": False},
},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": ["test-agent"],
"include_addons": None,
@ -1127,6 +1135,7 @@ async def test_agents_info(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": True,
"create_backup": {
"agent_ids": ["hassio.local", "hassio.share", "test-agent"],
"include_addons": None,
@ -1158,6 +1167,7 @@ async def test_agents_info(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": True,
"create_backup": {
"agent_ids": ["backup.local", "test-agent"],
"include_addons": None,
@ -1343,6 +1353,18 @@ async def test_config_load_config_info(
},
},
],
[
{
"type": "backup/config/update",
"automatic_backups_configured": False,
}
],
[
{
"type": "backup/config/update",
"automatic_backups_configured": True,
}
],
],
)
@patch("homeassistant.components.backup.config.random.randint", Mock(return_value=600))
@ -1774,6 +1796,7 @@ async def test_config_schedule_logic(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": ["test.test-agent"],
"include_addons": [],
@ -2436,6 +2459,7 @@ async def test_config_retention_copies_logic(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": ["test-agent"],
"include_addons": ["test-addon"],
@ -2714,6 +2738,7 @@ async def test_config_retention_copies_logic_manual_backup(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": ["test-agent"],
"include_addons": ["test-addon"],
@ -3161,6 +3186,7 @@ async def test_config_retention_days_logic(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": False,
"create_backup": {
"agent_ids": ["test-agent"],
"include_addons": ["test-addon"],

View File

@ -6,6 +6,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': False,
'create_backup': dict({
'agent_ids': list([
]),
@ -43,6 +44,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
'test-agent1',
@ -89,6 +91,7 @@
'config': dict({
'agents': dict({
}),
'automatic_backups_configured': True,
'create_backup': dict({
'agent_ids': list([
'test-agent1',

View File

@ -2480,6 +2480,7 @@ async def test_restore_progress_after_restart_unknown_job(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": True,
"create_backup": {
"agent_ids": ["test-agent1", "hassio.local", "test-agent2"],
"include_addons": ["addon1", "addon2"],
@ -2511,6 +2512,7 @@ async def test_restore_progress_after_restart_unknown_job(
"backups": [],
"config": {
"agents": {},
"automatic_backups_configured": True,
"create_backup": {
"agent_ids": ["test-agent1", "backup.local", "test-agent2"],
"include_addons": ["addon1", "addon2"],