diff options
| -rw-r--r-- | src/wikiget/dl.py | 19 | ||||
| -rw-r--r-- | src/wikiget/file.py | 12 | ||||
| -rw-r--r-- | src/wikiget/parse.py | 4 | ||||
| -rw-r--r-- | src/wikiget/wikiget.py | 4 | ||||
| -rw-r--r-- | tests/test_file_class.py | 10 | ||||
| -rw-r--r-- | tests/test_parse.py | 20 |
6 files changed, 40 insertions, 29 deletions
diff --git a/src/wikiget/dl.py b/src/wikiget/dl.py index 4521b72..171b017 100644 --- a/src/wikiget/dl.py +++ b/src/wikiget/dl.py @@ -30,10 +30,8 @@ from wikiget.validations import verify_hash def query_api(filename, site_name, args): - logging.debug(f"User agent: {wikiget.USER_AGENT}") - # connect to site and identify ourselves - logging.info(f"Site name: {site_name}") + logging.info(f"Connecting to {site_name}") try: site = Site(site_name, path=args.path, clients_useragent=wikiget.USER_AGENT) if args.username and args.password: @@ -60,7 +58,7 @@ def query_api(filename, site_name, args): # get info about the target file try: - file = site.images[filename] + image = site.images[filename] except APIError as e: # an API error at this point likely means access is denied, which could happen # with a private wiki @@ -71,23 +69,22 @@ def query_api(filename, site_name, args): logging.debug(i) raise - return file, site + return image def prep_download(dl, args): - filename, dest, site_name = get_dest(dl, args) - file = File(filename, dest) - file.object, file.site = query_api(file.name, site_name, args) + file = get_dest(dl, args) + file.image = query_api(file.name, file.site, args) return file def download(f, args): - file = f.object + file = f.image filename = f.name - site = f.site dest = f.dest + site = file.site - if file.imageinfo != {}: + if file.exists: # file exists either locally or at a common repository, like Wikimedia Commons file_url = file.imageinfo["url"] file_size = file.imageinfo["size"] diff --git a/src/wikiget/file.py b/src/wikiget/file.py index c1b9ae6..b890e63 100644 --- a/src/wikiget/file.py +++ b/src/wikiget/file.py @@ -15,9 +15,13 @@ # You should have received a copy of the GNU General Public License # along with Wikiget. If not, see <https://www.gnu.org/licenses/>. +from mwclient.image import Image + +from wikiget import DEFAULT_SITE + class File: - def __init__(self, name, dest=""): + def __init__(self, name: str, dest: str = "", site: str = "") -> None: """ Initializes a new file with the specified name and an optional destination name. @@ -26,8 +30,10 @@ class File: :param dest: destination of the file, if different from the name; if not specified, defaults to the name :type dest: str, optional + :param site: name of the site hosting the file; if not specified, defaults to + the global default site """ - self.object = None - self.site = None + self.image: Image = None self.name = name self.dest = dest if dest else name + self.site = site if site else DEFAULT_SITE diff --git a/src/wikiget/parse.py b/src/wikiget/parse.py index f5c221d..4e9b195 100644 --- a/src/wikiget/parse.py +++ b/src/wikiget/parse.py @@ -52,4 +52,6 @@ def get_dest(dl, args): dest = args.output or filename - return filename, dest, site_name + file = File(filename, dest, site_name) + + return file diff --git a/src/wikiget/wikiget.py b/src/wikiget/wikiget.py index af13bc8..90078e1 100644 --- a/src/wikiget/wikiget.py +++ b/src/wikiget/wikiget.py @@ -195,15 +195,15 @@ def batch_download(args): def main(): - # setup + # setup our environment parser = construct_parser() args = parser.parse_args() - configure_logging(args) # log events are appended to the file if it already exists, so note the start of a # new download session logging.info(f"Starting download session using wikiget {wikiget.wikiget_version}") + logging.debug(f"User agent: {wikiget.USER_AGENT}") if args.batch: # batch download mode diff --git a/tests/test_file_class.py b/tests/test_file_class.py index 7ad0b87..dd30207 100644 --- a/tests/test_file_class.py +++ b/tests/test_file_class.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 wikiget import DEFAULT_SITE from wikiget.file import File @@ -22,10 +23,15 @@ def test_file_with_name_only(): file = File("foobar.jpg") assert file.name == "foobar.jpg" assert file.dest == file.name + assert file.site == DEFAULT_SITE def test_file_with_name_and_dest(): - file = File("foobar.jpg", "bazqux.jpg") - assert file.name == "foobar.jpg" + file = File("foobar.jpg", dest="bazqux.jpg") assert file.dest == "bazqux.jpg" assert file.dest != file.name + + +def test_file_with_name_and_site(): + file = File("foobar.jpg", site="en.wikipedia.org") + assert file.site == "en.wikipedia.org" diff --git a/tests/test_parse.py b/tests/test_parse.py index c47678e..757b361 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -27,10 +27,10 @@ class TestGetDest: def test_get_dest_with_filename(self): args = self.parser.parse_args(["File:Example.jpg"]) - filename, dest, site_name = get_dest(args.FILE, args) - assert filename == "Example.jpg" - assert dest == "Example.jpg" - assert site_name == "commons.wikimedia.org" + file = get_dest(args.FILE, args) + assert file.name == "Example.jpg" + assert file.dest == "Example.jpg" + assert file.site == "commons.wikimedia.org" def test_get_dest_with_url(self): args = self.parser.parse_args( @@ -38,15 +38,15 @@ class TestGetDest: "https://en.wikipedia.org/wiki/File:Example.jpg", ] ) - filename, dest, site_name = get_dest(args.FILE, args) - assert filename == "Example.jpg" - assert dest == "Example.jpg" - assert site_name == "en.wikipedia.org" + file = get_dest(args.FILE, args) + assert file.name == "Example.jpg" + assert file.dest == "Example.jpg" + assert file.site == "en.wikipedia.org" def test_get_dest_with_bad_filename(self): args = self.parser.parse_args(["Example.jpg"]) with pytest.raises(ParseError): - filename, dest, site_name = get_dest(args.FILE, args) + _ = get_dest(args.FILE, args) def test_get_dest_with_different_site(self, caplog: pytest.LogCaptureFixture): args = self.parser.parse_args( @@ -56,5 +56,5 @@ class TestGetDest: "commons.wikimedia.org", ] ) - filename, dest, site_name = get_dest(args.FILE, args) + _ = get_dest(args.FILE, args) assert "Target is a URL, ignoring site specified with --site" in caplog.text |
