diff options
| -rw-r--r-- | src/wikiget/dl.py | 7 | ||||
| -rw-r--r-- | src/wikiget/file.py | 3 | ||||
| -rw-r--r-- | src/wikiget/validations.py | 9 | ||||
| -rw-r--r-- | tests/test_dl.py | 4 | ||||
| -rw-r--r-- | tests/test_file_class.py | 6 | ||||
| -rw-r--r-- | tests/test_parse.py | 4 | ||||
| -rw-r--r-- | tests/test_validations.py | 2 |
7 files changed, 19 insertions, 16 deletions
diff --git a/src/wikiget/dl.py b/src/wikiget/dl.py index 9b2777f..60405d0 100644 --- a/src/wikiget/dl.py +++ b/src/wikiget/dl.py @@ -19,7 +19,6 @@ import logging import sys from argparse import Namespace from concurrent.futures import ThreadPoolExecutor -from pathlib import Path from mwclient import APIError, InvalidResponse, LoginError from requests import ConnectionError, HTTPError @@ -54,7 +53,7 @@ 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 Path(file.dest).is_file() and not args.force: + if file.dest.is_file() and not args.force: msg = f"[{file.dest}] File already exists; skipping download (use -f to force)" raise FileExistsError(msg) @@ -203,13 +202,13 @@ def download(f: File, args: Namespace) -> int: try: with tqdm( - desc=dest, + desc=str(dest), leave=args.verbose >= wikiget.STD_VERBOSE, total=file_size, unit="B", unit_scale=True, unit_divisor=wikiget.CHUNKSIZE, - ) as progress_bar, Path(dest).open("wb") as fd: + ) as progress_bar, dest.open("wb") as fd: # download the file using the existing Site session res = site.connection.get(file_url, stream=True) for chunk in res.iter_content(wikiget.CHUNKSIZE): diff --git a/src/wikiget/file.py b/src/wikiget/file.py index cbd738a..e36feba 100644 --- a/src/wikiget/file.py +++ b/src/wikiget/file.py @@ -15,6 +15,7 @@ # You should have received a copy of the GNU General Public License # along with Wikiget. If not, see <https://www.gnu.org/licenses/>. +from pathlib import Path from typing import TYPE_CHECKING if TYPE_CHECKING: @@ -47,7 +48,7 @@ class File: """ self.image: Image = None self.name = name - self.dest = dest if dest else name + self.dest = Path(dest) if dest else Path(name) self.site = site if site else DEFAULT_SITE def __eq__(self, other: object) -> bool: diff --git a/src/wikiget/validations.py b/src/wikiget/validations.py index c7cc2dd..7c2b5ae 100644 --- a/src/wikiget/validations.py +++ b/src/wikiget/validations.py @@ -19,10 +19,13 @@ from __future__ import annotations import hashlib import re -from pathlib import Path +from typing import TYPE_CHECKING from wikiget import BLOCKSIZE +if TYPE_CHECKING: + from pathlib import Path + def valid_file(search_string: str) -> re.Match | None: """Determine if the given string contains a valid file name. @@ -60,7 +63,7 @@ def valid_site(search_string: str) -> re.Match | None: return site_regex.search(search_string) -def verify_hash(filename: str) -> str: +def verify_hash(file: Path) -> str: """Calculate the SHA1 hash of the given file for comparison with a known value. Despite being insecure, SHA1 is used since that's what the MediaWiki API returns for @@ -72,7 +75,7 @@ def verify_hash(filename: str) -> str: :rtype: str """ hasher = hashlib.sha1() # noqa: S324 - with Path(filename).open("rb") as dl: + with file.open("rb") as dl: buf = dl.read(BLOCKSIZE) while len(buf) > 0: hasher.update(buf) diff --git a/tests/test_dl.py b/tests/test_dl.py index cb5f0b6..cb893b8 100644 --- a/tests/test_dl.py +++ b/tests/test_dl.py @@ -375,7 +375,7 @@ class TestDownload: with patch("wikiget.dl.verify_hash") as mock_verify_hash: mock_verify_hash.return_value = "d01b79a6781c72ac9bfff93e5e2cfbeef4efc840" - args = parse_args(["-o", tmp_file, "File:Example.jpg"]) + args = parse_args(["-o", str(tmp_file), "File:Example.jpg"]) errors = download(mock_file, args) assert caplog.record_tuples[0] == ( @@ -414,7 +414,7 @@ class TestDownload: If the downloaded file cannot be created, an error log message should be created with details on the exception. """ - with patch("wikiget.dl.Path.open") as mock_open: + with patch("pathlib.Path.open") as mock_open: mock_open.side_effect = OSError("write error") args = parse_args(["File:Example.jpg"]) errors = download(mock_file, args) diff --git a/tests/test_file_class.py b/tests/test_file_class.py index 8e68239..a8afe55 100644 --- a/tests/test_file_class.py +++ b/tests/test_file_class.py @@ -30,7 +30,7 @@ class TestFileClass: def test_file_with_name_dest(self, file_with_name: File) -> None: """The file dest attribute should be the same as the name.""" - assert file_with_name.dest == file_with_name.name + assert file_with_name.dest.match(file_with_name.name) def test_file_with_name_site(self, file_with_name: File) -> None: """The file site attribute should equal the default site.""" @@ -38,11 +38,11 @@ class TestFileClass: def test_file_with_name_and_dest(self, file_with_name_and_dest: File) -> None: """The file dest attribute should equal what was passed in.""" - assert file_with_name_and_dest.dest == "bazqux.jpg" + assert file_with_name_and_dest.dest.match("bazqux.jpg") def test_name_and_dest_are_different(self, file_with_name_and_dest: File) -> None: """The file name and dest attributes should not be the same.""" - assert file_with_name_and_dest.dest != file_with_name_and_dest.name + assert not file_with_name_and_dest.dest.match(file_with_name_and_dest.name) def test_file_with_name_and_site(self) -> None: """Test the attributes of a File created with a name and site. diff --git a/tests/test_parse.py b/tests/test_parse.py index fb824d4..bec2113 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -60,7 +60,7 @@ class TestGetDest: Unless otherwise specified, it should match the filename. """ - assert file_with_filename.dest == "Example.jpg" + assert file_with_filename.dest.match("Example.jpg") def test_get_dest_site_with_filename(self, file_with_filename: File) -> None: """Test that the file's site attribute is set correctly. @@ -88,7 +88,7 @@ class TestGetDest: def test_get_dest_with_url(self, file_with_url: File) -> None: """Test that the file's dest attribute is set correctly.""" - assert file_with_url.dest == "Example.jpg" + assert file_with_url.dest.match("Example.jpg") def test_get_dest_site_with_url(self, file_with_url: File) -> None: """Test that the file's site attribute is set correctly. diff --git a/tests/test_validations.py b/tests/test_validations.py index aa4fdd0..072858e 100644 --- a/tests/test_validations.py +++ b/tests/test_validations.py @@ -170,4 +170,4 @@ class TestVerifyHash: """ expected_sha1 = "cd19c009a30ca9b68045415a3a0838e64f3c2443" - assert verify_hash(str(test_file)) == expected_sha1 + assert verify_hash(test_file) == expected_sha1 |
