aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wikiget/dl.py16
-rw-r--r--src/wikiget/wikiget.py3
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