update comments + fix mock

This commit is contained in:
Kay0u 2020-04-13 00:07:54 +02:00
parent e63679684a
commit 7de8417fb2
No known key found for this signature in database
GPG key ID: AE1DCADB6415A156
2 changed files with 17 additions and 23 deletions

View file

@ -219,8 +219,8 @@ class BackupManager():
backup_manager = BackupManager(name="mybackup", description="bkp things") backup_manager = BackupManager(name="mybackup", description="bkp things")
# Add backup method to apply # Add backup method to apply
backup_manager.add(BackupMethod.create('copy','/mnt/local_fs')) backup_manager.add(BackupMethod.create('copy', backup_manager, '/mnt/local_fs'))
backup_manager.add(BackupMethod.create('tar','/mnt/remote_fs')) backup_manager.add(BackupMethod.create('tar', backup_manager, '/mnt/remote_fs'))
# Define targets to be backuped # Define targets to be backuped
backup_manager.set_system_targets(["data"]) backup_manager.set_system_targets(["data"])
@ -972,7 +972,9 @@ class RestoreManager():
# Otherwise, attempt to find it (or them?) in the archive # Otherwise, attempt to find it (or them?) in the archive
# If we didn't find it, we ain't gonna be able to restore it # If we didn't find it, we ain't gonna be able to restore it
if system_part not in self.info['system'] or len(self.info['system'][system_part]['paths']) == 0: if system_part not in self.info['system'] or\
'paths' not in self.info['system'][system_part] or\
len(self.info['system'][system_part]['paths']) == 0:
logger.exception(m18n.n('restore_hook_unavailable', part=system_part)) logger.exception(m18n.n('restore_hook_unavailable', part=system_part))
self.targets.set_result("system", system_part, "Skipped") self.targets.set_result("system", system_part, "Skipped")
continue continue
@ -1506,11 +1508,11 @@ class BackupMethod(object):
create(cls, method, **kwargs) create(cls, method, **kwargs)
Usage: Usage:
method = BackupMethod.create("tar") method = BackupMethod.create("tar", backup_manager)
method.mount_and_backup() method.mount_and_backup()
#or #or
method = BackupMethod.create("copy") method = BackupMethod.create("copy", restore_manager)
method.mount(restore_manager) method.mount()
""" """
def __init__(self, manager, repo=None): def __init__(self, manager, repo=None):
@ -1738,7 +1740,7 @@ class BackupMethod(object):
shutil.copy(path['source'], dest) shutil.copy(path['source'], dest)
@classmethod @classmethod
def create(cls, method, *args): def create(cls, method, manager, *args):
""" """
Factory method to create instance of BackupMethod Factory method to create instance of BackupMethod
@ -1754,7 +1756,7 @@ class BackupMethod(object):
if not isinstance(method, basestring): if not isinstance(method, basestring):
methods = [] methods = []
for m in method: for m in method:
methods.append(BackupMethod.create(m, *args)) methods.append(BackupMethod.create(m, manager, *args))
return methods return methods
bm_class = { bm_class = {
@ -1763,9 +1765,9 @@ class BackupMethod(object):
'borg': BorgBackupMethod 'borg': BorgBackupMethod
} }
if method in ["copy", "tar", "borg"]: if method in ["copy", "tar", "borg"]:
return bm_class[method](*args) return bm_class[method](manager, *args)
else: else:
return CustomBackupMethod(method=method, *args) return CustomBackupMethod(manager, method=method, *args)
class CopyBackupMethod(BackupMethod): class CopyBackupMethod(BackupMethod):
@ -1913,7 +1915,8 @@ class TarBackupMethod(BackupMethod):
""" """
super(TarBackupMethod, self).mount() super(TarBackupMethod, self).mount()
# Check the archive can be open # Mount the tarball
logger.debug(m18n.n("restore_extracting"))
try: try:
tar = tarfile.open(self._archive_file, "r:gz") tar = tarfile.open(self._archive_file, "r:gz")
except: except:
@ -1926,15 +1929,7 @@ class TarBackupMethod(BackupMethod):
except IOError as e: except IOError as e:
raise YunohostError("backup_archive_corrupted", archive=self._archive_file, error=str(e)) raise YunohostError("backup_archive_corrupted", archive=self._archive_file, error=str(e))
# FIXME : Is this really useful to close the archive just to if "info.json" in tar.getnames():
# reopen it right after this with the same options ...?
tar.close()
# Mount the tarball
logger.debug(m18n.n("restore_extracting"))
tar = tarfile.open(self._archive_file, "r:gz")
if "info.json" in files_in_archive:
leading_dot = "" leading_dot = ""
tar.extract('info.json', path=self.work_dir) tar.extract('info.json', path=self.work_dir)
elif "./info.json" in files_in_archive: elif "./info.json" in files_in_archive:
@ -1989,7 +1984,7 @@ class TarBackupMethod(BackupMethod):
] ]
tar.extractall(members=subdir_and_files, path=self.work_dir) tar.extractall(members=subdir_and_files, path=self.work_dir)
# FIXME : Don't we want to close the tar archive here or at some point ? tar.close()
def copy(self, file, target): def copy(self, file, target):
tar = tarfile.open(self._archive_file, "r:gz") tar = tarfile.open(self._archive_file, "r:gz")

View file

@ -593,8 +593,7 @@ def test_restore_archive_with_bad_archive(mocker):
def test_backup_binds_are_readonly(mocker, monkeypatch): def test_backup_binds_are_readonly(mocker, monkeypatch):
def custom_mount_and_backup(self, backup_manager): def custom_mount_and_backup(self):
self.manager = backup_manager
self._organize_files() self._organize_files()
confssh = os.path.join(self.work_dir, "conf/ssh") confssh = os.path.join(self.work_dir, "conf/ssh")