mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Allow renaming of backup files in Synology DSM (#138652)
* get backup base file name from meta file * use BackupNotFound
This commit is contained in:
parent
e0b50ee1e2
commit
ccd0e27e84
@ -14,6 +14,7 @@ from homeassistant.components.backup import (
|
||||
AgentBackup,
|
||||
BackupAgent,
|
||||
BackupAgentError,
|
||||
BackupNotFound,
|
||||
suggested_filename,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
@ -101,6 +102,7 @@ class SynologyDSMBackupAgent(BackupAgent):
|
||||
)
|
||||
syno_data: SynologyDSMData = hass.data[DOMAIN][entry.unique_id]
|
||||
self.api = syno_data.api
|
||||
self.backup_base_names: dict[str, str] = {}
|
||||
|
||||
@property
|
||||
def _file_station(self) -> SynoFileStation:
|
||||
@ -109,18 +111,19 @@ class SynologyDSMBackupAgent(BackupAgent):
|
||||
assert self.api.file_station
|
||||
return self.api.file_station
|
||||
|
||||
async def _async_suggested_filenames(
|
||||
async def _async_backup_filenames(
|
||||
self,
|
||||
backup_id: str,
|
||||
) -> tuple[str, str]:
|
||||
"""Suggest filenames for the backup.
|
||||
"""Return the actual backup filenames.
|
||||
|
||||
:param backup_id: The ID of the backup that was returned in async_list_backups.
|
||||
:return: A tuple of tar_filename and meta_filename
|
||||
"""
|
||||
if (backup := await self.async_get_backup(backup_id)) is None:
|
||||
raise BackupAgentError("Backup not found")
|
||||
return suggested_filenames(backup)
|
||||
if await self.async_get_backup(backup_id) is None:
|
||||
raise BackupNotFound
|
||||
base_name = self.backup_base_names[backup_id]
|
||||
return (f"{base_name}.tar", f"{base_name}_meta.json")
|
||||
|
||||
async def async_download_backup(
|
||||
self,
|
||||
@ -132,7 +135,7 @@ class SynologyDSMBackupAgent(BackupAgent):
|
||||
:param backup_id: The ID of the backup that was returned in async_list_backups.
|
||||
:return: An async iterator that yields bytes.
|
||||
"""
|
||||
(filename_tar, _) = await self._async_suggested_filenames(backup_id)
|
||||
(filename_tar, _) = await self._async_backup_filenames(backup_id)
|
||||
|
||||
try:
|
||||
resp = await self._file_station.download_file(
|
||||
@ -193,7 +196,7 @@ class SynologyDSMBackupAgent(BackupAgent):
|
||||
:param backup_id: The ID of the backup that was returned in async_list_backups.
|
||||
"""
|
||||
try:
|
||||
(filename_tar, filename_meta) = await self._async_suggested_filenames(
|
||||
(filename_tar, filename_meta) = await self._async_backup_filenames(
|
||||
backup_id
|
||||
)
|
||||
except BackupAgentError:
|
||||
@ -247,6 +250,7 @@ class SynologyDSMBackupAgent(BackupAgent):
|
||||
assert files
|
||||
|
||||
backups: dict[str, AgentBackup] = {}
|
||||
backup_base_names: dict[str, str] = {}
|
||||
for file in files:
|
||||
if file.name.endswith("_meta.json"):
|
||||
try:
|
||||
@ -255,7 +259,10 @@ class SynologyDSMBackupAgent(BackupAgent):
|
||||
LOGGER.error("Failed to download meta data: %s", err)
|
||||
continue
|
||||
agent_backup = AgentBackup.from_dict(meta_data)
|
||||
backups[agent_backup.backup_id] = agent_backup
|
||||
backup_id = agent_backup.backup_id
|
||||
backups[backup_id] = agent_backup
|
||||
backup_base_names[backup_id] = file.name.replace("_meta.json", "")
|
||||
self.backup_base_names = backup_base_names
|
||||
return backups
|
||||
|
||||
async def async_get_backup(
|
||||
|
Loading…
x
Reference in New Issue
Block a user