aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wikiget/dl.py14
-rw-r--r--src/wikiget/wikiget.py4
-rw-r--r--tests/test_dl.py16
3 files changed, 19 insertions, 15 deletions
diff --git a/src/wikiget/dl.py b/src/wikiget/dl.py
index 20d8a07..f39c355 100644
--- a/src/wikiget/dl.py
+++ b/src/wikiget/dl.py
@@ -49,7 +49,7 @@ def prep_download(dl: str, args: Namespace) -> File:
return file
-def process_download(args: Namespace) -> None:
+def process_download(args: Namespace) -> int:
if args.batch:
# batch download mode
errors = batch_download(args)
@@ -59,23 +59,25 @@ def process_download(args: Namespace) -> None:
logger.warning(
f"{errors} problem{'s'[:errors^1]} encountered during batch processing"
)
- sys.exit(1) # completed with errors
+ return 1 # completed with errors
+ return 0
else:
# single download mode
try:
file = prep_download(args.FILE, args)
except ParseError as e:
logger.error(e)
- sys.exit(1)
+ return 1
except FileExistsError as e:
logger.warning(e)
- sys.exit(1)
+ return 1
except (ConnectionError, HTTPError, InvalidResponse, LoginError, APIError):
- sys.exit(1)
+ return 1
errors = download(file, args)
if errors:
- sys.exit(1) # completed with errors
+ return 1 # completed with errors
+ return 0
def batch_download(args: Namespace) -> int:
diff --git a/src/wikiget/wikiget.py b/src/wikiget/wikiget.py
index 33f7b2c..6b54886 100644
--- a/src/wikiget/wikiget.py
+++ b/src/wikiget/wikiget.py
@@ -17,6 +17,7 @@
import argparse
import logging
+import sys
import wikiget
from wikiget.dl import process_download
@@ -129,4 +130,5 @@ def main() -> None:
logger.info(f"Starting download session using wikiget {wikiget.__version__}")
logger.debug(f"User agent: {wikiget.USER_AGENT}")
- process_download(args)
+ exit_code = process_download(args)
+ sys.exit(exit_code)
diff --git a/tests/test_dl.py b/tests/test_dl.py
index 61efbe0..ba9ce32 100644
--- a/tests/test_dl.py
+++ b/tests/test_dl.py
@@ -56,8 +56,9 @@ class TestProcessDownload:
"""
args = construct_parser().parse_args(["-a", "batch.txt"])
mock_batch_download.return_value = 0
- process_download(args)
+ exit_code = process_download(args)
assert mock_batch_download.called
+ assert exit_code == 0
@patch("wikiget.dl.batch_download")
def test_batch_download_with_errors(
@@ -69,10 +70,9 @@ class TestProcessDownload:
"""
args = construct_parser().parse_args(["-a", "batch.txt"])
mock_batch_download.return_value = 4
- with pytest.raises(SystemExit) as e:
- process_download(args)
+ exit_code = process_download(args)
assert mock_batch_download.called
- assert e.value.code == 1
+ assert exit_code == 1
assert "4 problems encountered during batch processing" in caplog.text
@patch("wikiget.dl.prep_download")
@@ -86,9 +86,10 @@ class TestProcessDownload:
args = construct_parser().parse_args(["File:Example.jpg"])
mock_download.return_value = 0
mock_prep_download.return_value = MagicMock(File)
- process_download(args)
+ exit_code = process_download(args)
assert mock_prep_download.called
assert mock_download.called
+ assert exit_code == 0
@patch("wikiget.dl.prep_download")
@patch("wikiget.dl.download")
@@ -101,8 +102,7 @@ class TestProcessDownload:
args = construct_parser().parse_args(["File:Example.jpg"])
mock_download.return_value = 1
mock_prep_download.return_value = MagicMock(File)
- with pytest.raises(SystemExit) as e:
- process_download(args)
+ exit_code = process_download(args)
assert mock_prep_download.called
assert mock_download.called
- assert e.value.code == 1
+ assert exit_code == 1