diff options
Diffstat (limited to 'src/wikiget')
| -rw-r--r-- | src/wikiget/dl.py | 16 | ||||
| -rw-r--r-- | src/wikiget/wikiget.py | 3 |
2 files changed, 14 insertions, 5 deletions
diff --git a/src/wikiget/dl.py b/src/wikiget/dl.py index f210182..2fd7388 100644 --- a/src/wikiget/dl.py +++ b/src/wikiget/dl.py @@ -38,6 +38,12 @@ logger = logging.getLogger(__name__) def prep_download(dl: str, args: Namespace) -> File: file = get_dest(dl, args) + + # check if the destination file already exists; don't overwrite unless the user says + if os.path.isfile(file.dest) and not args.force: + msg = f"[{file.dest}] File already exists; skipping download (use -f to force)" + raise FileExistsError(msg) + site = connect_to_site(file.site, args) file.image = query_api(file.name, site) return file @@ -65,6 +71,10 @@ def batch_download(args: Namespace) -> int: logger.warning(f"{e} (line {line_num})") errors += 1 continue + except FileExistsError as e: + logger.warning(e) + errors += 1 + continue except (ConnectionError, HTTPError, InvalidResponse, LoginError, APIError): logger.warning( f"Unable to download '{line}' (line {line_num}) due to an error" @@ -101,11 +111,7 @@ def download(f: File, args: Namespace) -> int: adapter.info(filename_log) adapter.info(f"{file_url}") - if os.path.isfile(dest) and not args.force: - # TODO: check for this before the download process starts - adapter.warning("File already exists; skipping download (use -f to force)") - errors += 1 - elif args.dry_run: + if args.dry_run: adapter.warning("Dry run; download skipped") else: try: diff --git a/src/wikiget/wikiget.py b/src/wikiget/wikiget.py index 0b08f68..f42da35 100644 --- a/src/wikiget/wikiget.py +++ b/src/wikiget/wikiget.py @@ -151,8 +151,11 @@ def main() -> None: except ParseError as e: logger.error(e) sys.exit(1) + except FileExistsError: + sys.exit(1) except (ConnectionError, HTTPError, InvalidResponse, LoginError, APIError): sys.exit(1) + errors = download(file, args) if errors: sys.exit(1) # completed with errors |
