mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Fuck it let's keep that code simple, we don't need to maintain the list of exception that a command is likely to return, this is supposed to be simple to read if code is well written
This commit is contained in:
parent
98e972a49a
commit
efc2e7ef1d
1 changed files with 9 additions and 85 deletions
|
@ -309,17 +309,6 @@ class BackupManager():
|
||||||
"""Initialize preparation directory
|
"""Initialize preparation directory
|
||||||
|
|
||||||
Ensure the working directory exists and is empty
|
Ensure the working directory exists and is empty
|
||||||
|
|
||||||
exception:
|
|
||||||
backup_output_directory_not_empty -- (YunohostError) Raised if the
|
|
||||||
directory was given by the user and isn't empty
|
|
||||||
|
|
||||||
(TODO) backup_cant_clean_tmp_working_directory -- (YunohostError)
|
|
||||||
Raised if the working directory isn't empty, is temporary and can't
|
|
||||||
be automaticcaly cleaned
|
|
||||||
|
|
||||||
(TODO) backup_cant_create_working_directory -- (YunohostError) Raised
|
|
||||||
if iyunohost can't create the working directory
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# FIXME replace isdir by exists ? manage better the case where the path
|
# FIXME replace isdir by exists ? manage better the case where the path
|
||||||
|
@ -503,10 +492,6 @@ class BackupManager():
|
||||||
files to backup
|
files to backup
|
||||||
hooks/ -- restore scripts associated to system backup scripts are
|
hooks/ -- restore scripts associated to system backup scripts are
|
||||||
copied here
|
copied here
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
"backup_nothings_done" -- (YunohostError) This exception is raised if
|
|
||||||
nothing has been listed.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self._collect_system_files()
|
self._collect_system_files()
|
||||||
|
@ -673,10 +658,6 @@ class BackupManager():
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
app -- (string) an app instance name (already installed) to backup
|
app -- (string) an app instance name (already installed) to backup
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
backup_app_failed -- Raised at the end if the app backup script
|
|
||||||
execution failed
|
|
||||||
"""
|
"""
|
||||||
from yunohost.permission import user_permission_list
|
from yunohost.permission import user_permission_list
|
||||||
|
|
||||||
|
@ -809,7 +790,7 @@ class RestoreManager():
|
||||||
"""
|
"""
|
||||||
RestoreManager allow to restore a past backup archive
|
RestoreManager allow to restore a past backup archive
|
||||||
|
|
||||||
Currently it's a tar.gz file, but it could be another kind of archive
|
Currently it's a tar file, but it could be another kind of archive
|
||||||
|
|
||||||
Public properties:
|
Public properties:
|
||||||
info (getter)i # FIXME
|
info (getter)i # FIXME
|
||||||
|
@ -870,9 +851,6 @@ class RestoreManager():
|
||||||
def _read_info_files(self):
|
def _read_info_files(self):
|
||||||
"""
|
"""
|
||||||
Read the info file from inside an archive
|
Read the info file from inside an archive
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
backup_archive_cant_retrieve_info_json -- Raised if we can't read the info
|
|
||||||
"""
|
"""
|
||||||
# Retrieve backup info
|
# Retrieve backup info
|
||||||
info_file = os.path.join(self.work_dir, "info.json")
|
info_file = os.path.join(self.work_dir, "info.json")
|
||||||
|
@ -1030,10 +1008,6 @@ class RestoreManager():
|
||||||
|
|
||||||
Use the mount method from the BackupMethod instance and read info about
|
Use the mount method from the BackupMethod instance and read info about
|
||||||
this archive
|
this archive
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
restore_removing_tmp_dir_failed -- Raised if it's not possible to remove
|
|
||||||
the working directory
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.work_dir = os.path.join(BACKUP_PATH, "tmp", self.name)
|
self.work_dir = os.path.join(BACKUP_PATH, "tmp", self.name)
|
||||||
|
@ -1107,11 +1081,6 @@ class RestoreManager():
|
||||||
def assert_enough_free_space(self):
|
def assert_enough_free_space(self):
|
||||||
"""
|
"""
|
||||||
Check available disk space
|
Check available disk space
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
restore_may_be_not_enough_disk_space -- Raised if there isn't enough
|
|
||||||
space to cover the security margin space
|
|
||||||
restore_not_enough_disk_space -- Raised if there isn't enough space
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
free_space = free_space_in_directory(BACKUP_PATH)
|
free_space = free_space_in_directory(BACKUP_PATH)
|
||||||
|
@ -1293,11 +1262,6 @@ class RestoreManager():
|
||||||
Args:
|
Args:
|
||||||
app_instance_name -- (string) The app name to restore (no app with this
|
app_instance_name -- (string) The app name to restore (no app with this
|
||||||
name should be already install)
|
name should be already install)
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
restore_already_installed_app -- Raised if an app with this app instance
|
|
||||||
name already exists
|
|
||||||
restore_app_failed -- Raised if the restore bash script failed
|
|
||||||
"""
|
"""
|
||||||
from yunohost.user import user_group_list
|
from yunohost.user import user_group_list
|
||||||
from yunohost.permission import permission_create, permission_delete, user_permission_list, user_permission_update, permission_sync_to_user
|
from yunohost.permission import permission_create, permission_delete, user_permission_list, user_permission_update, permission_sync_to_user
|
||||||
|
@ -1500,7 +1464,7 @@ class BackupMethod(object):
|
||||||
|
|
||||||
TarBackupMethod
|
TarBackupMethod
|
||||||
---------------
|
---------------
|
||||||
This method compresses all files to backup in a .tar.gz archive. When
|
This method compresses all files to backup in a .tar archive. When
|
||||||
restoring, it untars the required parts.
|
restoring, it untars the required parts.
|
||||||
|
|
||||||
CustomBackupMethod
|
CustomBackupMethod
|
||||||
|
@ -1610,10 +1574,6 @@ class BackupMethod(object):
|
||||||
def clean(self):
|
def clean(self):
|
||||||
"""
|
"""
|
||||||
Umount sub directories of working dirextories and delete it if temporary
|
Umount sub directories of working dirextories and delete it if temporary
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
backup_cleaning_failed -- Raise if we were not able to unmount sub
|
|
||||||
directories of the working directories
|
|
||||||
"""
|
"""
|
||||||
if self.need_mount():
|
if self.need_mount():
|
||||||
if not _recursive_umount(self.work_dir):
|
if not _recursive_umount(self.work_dir):
|
||||||
|
@ -1625,9 +1585,6 @@ class BackupMethod(object):
|
||||||
def _check_is_enough_free_space(self):
|
def _check_is_enough_free_space(self):
|
||||||
"""
|
"""
|
||||||
Check free space in repository or output directory before to backup
|
Check free space in repository or output directory before to backup
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
not_enough_disk_space -- Raise if there isn't enough space.
|
|
||||||
"""
|
"""
|
||||||
# TODO How to do with distant repo or with deduplicated backup ?
|
# TODO How to do with distant repo or with deduplicated backup ?
|
||||||
backup_size = self.manager.size
|
backup_size = self.manager.size
|
||||||
|
@ -1649,9 +1606,6 @@ class BackupMethod(object):
|
||||||
|
|
||||||
The usage of binding could be strange for a user because the du -sb
|
The usage of binding could be strange for a user because the du -sb
|
||||||
command will return that the working directory is big.
|
command will return that the working directory is big.
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
backup_unable_to_organize_files
|
|
||||||
"""
|
"""
|
||||||
paths_needed_to_be_copied = []
|
paths_needed_to_be_copied = []
|
||||||
for path in self.manager.paths_to_backup:
|
for path in self.manager.paths_to_backup:
|
||||||
|
@ -1786,13 +1740,11 @@ class CopyBackupMethod(BackupMethod):
|
||||||
could be the inverse for restoring
|
could be the inverse for restoring
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
method_name = "copy"
|
||||||
|
|
||||||
def __init__(self, manager, repo=None):
|
def __init__(self, manager, repo=None):
|
||||||
super(CopyBackupMethod, self).__init__(manager, repo)
|
super(CopyBackupMethod, self).__init__(manager, repo)
|
||||||
|
|
||||||
@property
|
|
||||||
def method_name(self):
|
|
||||||
return 'copy'
|
|
||||||
|
|
||||||
def backup(self):
|
def backup(self):
|
||||||
""" Copy prepared files into a the repo """
|
""" Copy prepared files into a the repo """
|
||||||
# Check free space in output
|
# Check free space in output
|
||||||
|
@ -1817,10 +1769,6 @@ class CopyBackupMethod(BackupMethod):
|
||||||
def mount(self):
|
def mount(self):
|
||||||
"""
|
"""
|
||||||
Mount the uncompress backup in readonly mode to the working directory
|
Mount the uncompress backup in readonly mode to the working directory
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
backup_no_uncompress_archive_dir -- Raised if the repo doesn't exists
|
|
||||||
backup_cant_mount_uncompress_archive -- Raised if the binding failed
|
|
||||||
"""
|
"""
|
||||||
# FIXME: This code is untested because there is no way to run it from
|
# FIXME: This code is untested because there is no way to run it from
|
||||||
# the ynh cli
|
# the ynh cli
|
||||||
|
@ -1851,13 +1799,11 @@ class TarBackupMethod(BackupMethod):
|
||||||
This class compress all files to backup in archive.
|
This class compress all files to backup in archive.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
method_name = "tar"
|
||||||
|
|
||||||
def __init__(self, manager, repo=None):
|
def __init__(self, manager, repo=None):
|
||||||
super(TarBackupMethod, self).__init__(manager, repo)
|
super(TarBackupMethod, self).__init__(manager, repo)
|
||||||
|
|
||||||
@property
|
|
||||||
def method_name(self):
|
|
||||||
return 'tar'
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _archive_file(self):
|
def _archive_file(self):
|
||||||
"""Return the compress archive path"""
|
"""Return the compress archive path"""
|
||||||
|
@ -1872,11 +1818,6 @@ class TarBackupMethod(BackupMethod):
|
||||||
|
|
||||||
It adds the info.json in /home/yunohost.backup/archives and if the
|
It adds the info.json in /home/yunohost.backup/archives and if the
|
||||||
compress archive isn't located here, add a symlink to the archive to.
|
compress archive isn't located here, add a symlink to the archive to.
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
backup_archive_open_failed -- Raised if we can't open the archive
|
|
||||||
backup_creation_failed -- Raised if we can't write in the
|
|
||||||
compress archive
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not os.path.exists(self.repo):
|
if not os.path.exists(self.repo):
|
||||||
|
@ -1917,13 +1858,7 @@ class TarBackupMethod(BackupMethod):
|
||||||
|
|
||||||
def mount(self):
|
def mount(self):
|
||||||
"""
|
"""
|
||||||
Mount the archive. We avoid copy to be able to restore on system without
|
Mount the archive. We avoid intermediate copy to be able to restore on system with low free space.
|
||||||
too many space.
|
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
backup_archive_open_failed -- Raised if the archive can't be open
|
|
||||||
backup_archive_corrupted -- Raised if the archive appears corrupted
|
|
||||||
backup_archive_cant_retrieve_info_json -- If the info.json file can't be retrieved
|
|
||||||
"""
|
"""
|
||||||
super(TarBackupMethod, self).mount()
|
super(TarBackupMethod, self).mount()
|
||||||
|
|
||||||
|
@ -2015,21 +1950,16 @@ class CustomBackupMethod(BackupMethod):
|
||||||
/etc/yunohost/hooks.d/backup_method/
|
/etc/yunohost/hooks.d/backup_method/
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
method_name = "custom"
|
||||||
|
|
||||||
def __init__(self, manager, repo=None, method=None, **kwargs):
|
def __init__(self, manager, repo=None, method=None, **kwargs):
|
||||||
super(CustomBackupMethod, self).__init__(manager, repo)
|
super(CustomBackupMethod, self).__init__(manager, repo)
|
||||||
self.args = kwargs
|
self.args = kwargs
|
||||||
self.method = method
|
self.method = method
|
||||||
self._need_mount = None
|
self._need_mount = None
|
||||||
|
|
||||||
@property
|
|
||||||
def method_name(self):
|
|
||||||
return 'custom'
|
|
||||||
|
|
||||||
def need_mount(self):
|
def need_mount(self):
|
||||||
"""Call the backup_method hook to know if we need to organize files
|
"""Call the backup_method hook to know if we need to organize files
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
backup_custom_need_mount_error -- Raised if the hook failed
|
|
||||||
"""
|
"""
|
||||||
if self._need_mount is not None:
|
if self._need_mount is not None:
|
||||||
return self._need_mount
|
return self._need_mount
|
||||||
|
@ -2044,9 +1974,6 @@ class CustomBackupMethod(BackupMethod):
|
||||||
def backup(self):
|
def backup(self):
|
||||||
"""
|
"""
|
||||||
Launch a custom script to backup
|
Launch a custom script to backup
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
backup_custom_backup_error -- Raised if the custom script failed
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ret = hook_callback('backup_method', [self.method],
|
ret = hook_callback('backup_method', [self.method],
|
||||||
|
@ -2060,9 +1987,6 @@ class CustomBackupMethod(BackupMethod):
|
||||||
def mount(self):
|
def mount(self):
|
||||||
"""
|
"""
|
||||||
Launch a custom script to mount the custom archive
|
Launch a custom script to mount the custom archive
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
backup_custom_mount_error -- Raised if the custom script failed
|
|
||||||
"""
|
"""
|
||||||
super(CustomBackupMethod, self).mount()
|
super(CustomBackupMethod, self).mount()
|
||||||
ret = hook_callback('backup_method', [self.method],
|
ret = hook_callback('backup_method', [self.method],
|
||||||
|
|
Loading…
Add table
Reference in a new issue