From 5eb333f1ca060e20c063eeca329776159741323a Mon Sep 17 00:00:00 2001 From: Ivan Schaller Date: Sun, 12 Feb 2023 01:27:13 +0100 Subject: [PATCH] remove sys.exit --- mangadlp/app.py | 31 ++++++++++++++++--------------- mangadlp/cli.py | 39 +++++++++++++++++++++------------------ mangadlp/downloader.py | 6 ++---- 3 files changed, 39 insertions(+), 37 deletions(-) diff --git a/mangadlp/app.py b/mangadlp/app.py index 34e6560..f5a0744 100644 --- a/mangadlp/app.py +++ b/mangadlp/app.py @@ -1,6 +1,5 @@ import re import shutil -import sys from pathlib import Path from typing import Any, Union @@ -78,9 +77,9 @@ class MangaDLP: try: log.debug("Initializing api") self.api = self.api_used(self.url_uuid, self.language, self.forcevol) - except Exception: + except Exception as exc: log.error("Can't initialize api. Exiting") - sys.exit(1) + raise exc # get manga title and uuid self.manga_uuid = self.api.manga_uuid self.manga_title = self.api.manga_title @@ -96,7 +95,7 @@ class MangaDLP: log.error( 'You need to specify a manga url/uuid with "-u" or a list with "--read"' ) - sys.exit(1) + raise ValueError # checks if --list is not used if not self.list_chapters: if not self.chapters: @@ -104,15 +103,15 @@ class MangaDLP: log.error( 'You need to specify one or more chapters to download. To see all chapters use "--list"' ) - sys.exit(1) + raise ValueError # if forcevol is used, but didn't specify a volume in the chapters selected if self.forcevol and ":" not in self.chapters: log.error("You need to specify the volume if you use --forcevol") - sys.exit(1) + raise ValueError # if forcevol is not used, but a volume is specified if not self.forcevol and ":" in self.chapters: log.error("Don't specify the volume without --forcevol") - sys.exit(1) + raise ValueError # check the api which needs to be used def check_api(self, url_uuid: str) -> type: @@ -129,11 +128,11 @@ class MangaDLP: # this is only for testing multiple apis if api_test.search(url_uuid): log.critical("Not supported yet") - sys.exit(1) + raise ValueError # no supported api found log.error(f"No supported api in link/uuid found: {url_uuid}") - sys.exit(1) + raise ValueError # once called per manga def get_manga(self) -> None: @@ -206,6 +205,8 @@ class MangaDLP: try: chapter_path = self.get_chapter(chapter) + except KeyboardInterrupt as exc: + raise exc except FileExistsError: skipped_chapters.append(chapter) # update cache @@ -273,9 +274,9 @@ class MangaDLP: chapter_image_urls = self.api.get_chapter_images( chapter, self.download_wait ) - except KeyboardInterrupt: - log.critical("Stopping") - sys.exit(1) + except KeyboardInterrupt as exc: + log.critical("Keyboard interrupt. Stopping") + raise exc # check if the image urls are empty. if yes skip this chapter (for mass downloads) if not chapter_image_urls: @@ -364,9 +365,9 @@ class MangaDLP: downloader.download_chapter( chapter_image_urls, chapter_path, self.download_wait ) - except KeyboardInterrupt: - log.critical("Stopping") - sys.exit(1) + except KeyboardInterrupt as exc: + log.critical("Keyboard interrupt. Stopping") + raise exc except Exception as exc: log.error(f"Cant download: '{chapter_filename}'. Skipping") diff --git a/mangadlp/cli.py b/mangadlp/cli.py index e2e3be9..89b1bb2 100644 --- a/mangadlp/cli.py +++ b/mangadlp/cli.py @@ -256,24 +256,27 @@ def main( requested_mangas = [url_uuid] if url_uuid else read_mangas for manga in requested_mangas: - mdlp = app.MangaDLP( - url_uuid=manga, - language=lang, - chapters=chapters, - list_chapters=list_chapters, - file_format=chapter_format, - name_format=name_format, - name_format_none=name_format_none, - forcevol=forcevol, - download_path=path, - download_wait=wait_time, - manga_pre_hook_cmd=hook_manga_pre, - manga_post_hook_cmd=hook_manga_post, - chapter_pre_hook_cmd=hook_chapter_pre, - chapter_post_hook_cmd=hook_chapter_post, - cache_path=cache_path, - ) - mdlp.get_manga() + try: + mdlp = app.MangaDLP( + url_uuid=manga, + language=lang, + chapters=chapters, + list_chapters=list_chapters, + file_format=chapter_format, + name_format=name_format, + name_format_none=name_format_none, + forcevol=forcevol, + download_path=path, + download_wait=wait_time, + manga_pre_hook_cmd=hook_manga_pre, + manga_post_hook_cmd=hook_manga_post, + chapter_pre_hook_cmd=hook_chapter_pre, + chapter_post_hook_cmd=hook_chapter_post, + cache_path=cache_path, + ) + mdlp.get_manga() + except (KeyboardInterrupt, Exception) as exc: + log.error(f"Skipping: {manga}. Reason={exc}") if __name__ == "__main__": diff --git a/mangadlp/downloader.py b/mangadlp/downloader.py index 749b712..3826531 100644 --- a/mangadlp/downloader.py +++ b/mangadlp/downloader.py @@ -1,6 +1,5 @@ import logging import shutil -import sys from pathlib import Path from time import sleep from typing import Union @@ -35,9 +34,8 @@ def download_chapter( if r.status_code != 200: log.error(f"Request for image {image} failed, retrying") raise ConnectionError - except KeyboardInterrupt: - log.critical("Stopping") - sys.exit(1) + except KeyboardInterrupt as exc: + raise exc except Exception as exc: if counter >= 3: log.error("Maybe the MangaDex Servers are down?")