From 739522a151ade301d0f8318e405cb041873445e2 Mon Sep 17 00:00:00 2001 From: Daniel Augustin Date: Thu, 25 Jun 2020 21:55:08 +0200 Subject: [PATCH] Move download summary into a separate class --- PFERD/download_summary.py | 50 +++++++++++++++++++++++++++++++++++++++ PFERD/organizer.py | 13 +++++----- PFERD/pferd.py | 36 ++++------------------------ 3 files changed, 60 insertions(+), 39 deletions(-) create mode 100644 PFERD/download_summary.py diff --git a/PFERD/download_summary.py b/PFERD/download_summary.py new file mode 100644 index 0000000..ba9d06d --- /dev/null +++ b/PFERD/download_summary.py @@ -0,0 +1,50 @@ +class DownloadSummary: + + def __init__(self): + self._new_files = [] + self._changed_files = [] + self._deleted_files = [] + + def merge(self, summary: 'DownloadSummary') -> None: + self._new_files += summary._new_files + self._changed_files += summary._changed_files + self._deleted_files += summary._deleted_files + + def add_deleted_file(self, path) -> None: + self._deleted_files.append(path) + + def add_changed_file(self, path) -> None: + self._changed_files.append(path) + + def add_new_file(self, path) -> None: + self._new_files.append(path) + + def _has_no_updates(self) -> bool: + return len(self._new_files) == 0 and len(self._changed_files) == 0 and len(self._deleted_files) == 0 + + def print(self, logger, pretty) -> None: + logger.info("") + logger.info("Summary: ") + if self._has_no_updates(): + logger.info("nothing changed") + else: + if len(self._new_files) > 0: + logger.info("New Files:") + for file in self._new_files: + pretty.new_file(file) + + logger.info("") + + if len(self._changed_files) > 0: + logger.info("Modified Files:") + for file in self._changed_files: + pretty.modified_file(file) + + logger.info("") + + if len(self._deleted_files) > 0: + logger.info("Deleted Files:") + for file in self._deleted_files: + pretty.deleted_file(file) + + logger.info("") \ No newline at end of file diff --git a/PFERD/organizer.py b/PFERD/organizer.py index d8ac411..527d90c 100644 --- a/PFERD/organizer.py +++ b/PFERD/organizer.py @@ -9,6 +9,7 @@ import shutil from pathlib import Path, PurePath from typing import List, Set +from .download_summary import DownloadSummary from .location import Location from .logging import PrettyLogger from .utils import prompt_yes_no @@ -24,10 +25,6 @@ class FileAcceptException(Exception): class Organizer(Location): """A helper for managing downloaded files.""" - new_files = [] - modified_files = [] - deleted_files = [] - def __init__(self, path: Path): """Create a new organizer for a given path.""" super().__init__(path) @@ -36,6 +33,8 @@ class Organizer(Location): # Keep the root dir self._known_files.add(path.resolve()) + self.download_summary = DownloadSummary() + def accept_file(self, src: Path, dst: PurePath) -> None: """Move a file to this organizer and mark it.""" src_absolute = src.resolve() @@ -73,10 +72,10 @@ class Organizer(Location): dst_absolute.touch() return - self.modified_files.append(dst_absolute) + self.download_summary.add_changed_file(dst_absolute) PRETTY.modified_file(dst_absolute) else: - self.new_files.append(dst_absolute) + self.download_summary.add_new_file(dst_absolute) PRETTY.new_file(dst_absolute) # Create parent dir if needed @@ -127,5 +126,5 @@ class Organizer(Location): prompt = f"Do you want to delete {path}" if prompt_yes_no(prompt, False): - self.deleted_files.append(path) + self.download_summary.add_deleted_file(path) path.unlink() diff --git a/PFERD/pferd.py b/PFERD/pferd.py index d62c526..d678118 100644 --- a/PFERD/pferd.py +++ b/PFERD/pferd.py @@ -9,6 +9,7 @@ from typing import Callable, List, Optional, Union from .cookie_jar import CookieJar from .diva import (DivaDownloader, DivaDownloadStrategy, DivaPlaylistCrawler, diva_download_new) +from .download_summary import DownloadSummary from .errors import FatalException, swallow_and_print_errors from .ilias import (IliasAuthenticator, IliasCrawler, IliasDirectoryFilter, IliasDownloader, IliasDownloadInfo, IliasDownloadStrategy, @@ -34,10 +35,6 @@ class Pferd(Location): useful shortcuts for running synchronizers in a single interface. """ - new_files = [] - modified_files = [] - deleted_files = [] - def __init__( self, base_dir: Path, @@ -46,6 +43,7 @@ class Pferd(Location): ): super().__init__(Path(base_dir)) + self._download_summary = DownloadSummary() self._tmp_dir = TmpDir(self.resolve(tmp_dir)) self._test_run = test_run @@ -156,38 +154,12 @@ class Pferd(Location): clean=clean, ) - self.new_files += organizer.new_files - self.modified_files += organizer.modified_files - self.deleted_files += organizer.deleted_files + self._download_summary.merge(organizer.download_summary) return organizer def print_summary(self): - LOGGER.info("") - LOGGER.info("Summary: ") - if len(self.new_files) == 0 and len(self.modified_files) == 0 and len(self.deleted_files) == 0: - LOGGER.info("Nothing changed") - - if len(self.new_files) > 0: - LOGGER.info("New Files:") - for file in self.new_files: - PRETTY.new_file(file) - - LOGGER.info("") - - if len(self.modified_files) > 0: - LOGGER.info("Modified Files:") - for file in self.modified_files: - PRETTY.modified_file(file) - - LOGGER.info("") - - if len(self.deleted_files) > 0: - LOGGER.info("Deleted Files:") - for file in self.deleted_files: - PRETTY.deleted_file(file) - - LOGGER.info("") + self._download_summary.print(LOGGER, PRETTY) @swallow_and_print_errors def ilias_kit_personal_desktop(