diff --git a/kiauh/core/backup_manager/backup_manager.py b/kiauh/core/backup_manager/backup_manager.py index 556346d..d5cfca5 100644 --- a/kiauh/core/backup_manager/backup_manager.py +++ b/kiauh/core/backup_manager/backup_manager.py @@ -13,15 +13,17 @@ import shutil from pathlib import Path from typing import List -from kiauh import KIAUH_BACKUP_DIR +from kiauh.core.backup_manager import BACKUP_ROOT_DIR from kiauh.utils.common import get_current_date from kiauh.utils.logger import Logger +# noinspection PyUnusedLocal # noinspection PyMethodMayBeStatic class BackupManager: - def __init__(self, backup_root_dir: Path = KIAUH_BACKUP_DIR): + def __init__(self, backup_root_dir: Path = BACKUP_ROOT_DIR): self._backup_root_dir = backup_root_dir + self._ignore_folders = None @property def backup_root_dir(self) -> Path: @@ -31,6 +33,14 @@ class BackupManager: def backup_root_dir(self, value: Path): self._backup_root_dir = value + @property + def ignore_folders(self) -> List[str]: + return self._ignore_folders + + @ignore_folders.setter + def ignore_folders(self, value: List[str]): + self._ignore_folders = value + def backup_file( self, files: List[Path] = None, target: Path = None, custom_filename=None ): @@ -56,7 +66,7 @@ class BackupManager: def backup_directory(self, name: str, source: Path, target: Path = None) -> None: if source is None or not Path(source).exists(): - raise OSError + raise OSError("Parameter 'source' is None or Path does not exist!") target = self.backup_root_dir if target is None else target try: @@ -64,9 +74,20 @@ class BackupManager: Logger.print_status(log) date = get_current_date().get("date") time = get_current_date().get("time") - shutil.copytree(source, target.joinpath(f"{name}-{date}-{time}")) + shutil.copytree( + source, + target.joinpath(f"{name.lower()}-{date}-{time}"), + ignore=self.ignore_folders_func, + ) except OSError as e: Logger.print_error(f"Unable to backup directory '{source}':\n{e}") return Logger.print_ok("Backup successfull!") + + def ignore_folders_func(self, dirpath, filenames): + return ( + [f for f in filenames if f in self._ignore_folders] + if self._ignore_folders is not None + else [] + )