diff options
| -rw-r--r-- | .travis.yml | 3 | ||||
| -rw-r--r-- | README.md | 4 | ||||
| -rw-r--r-- | setup.py | 12 | ||||
| -rw-r--r-- | wikiget/version.py | 2 | ||||
| -rw-r--r-- | wikiget/wikiget.py | 93 |
5 files changed, 63 insertions, 51 deletions
diff --git a/.travis.yml b/.travis.yml index cda16db..d373bba 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: python dist: xenial python: -- '2.7' - '3.5' - '3.6' - '3.7' @@ -17,5 +16,5 @@ deploy: secure: KvcviHqqT4YprtmzAtf9w8BkKPfwJ53LIOXmUFotzT1Qjt3FSE7bWVzDItFjy54zZM+tqKAniL91R+2tM5uQFn4fVS/yykN1Akts6ZnkJdq99Lgdb1V3gEv366K5AWoYKgjZX+PRvmOk8BXSrqbVtXN0lhmoemmeJVDqDHg2HJZNYFwvmr/g64amm2d/cdfLxKHpduwciNY6xUhOFIdlbrJ1T767mpC+gnqfzmJeNF7K95pmyBF6Wvl4AkKzwJJkyZULQF2VFtIT6bzSuM6G26ZT6H7UyoP+8+CvI4Fe6h8Ol7sWSuVC5gz+5istRORUy8RQ22HWW1ZZKOw1+8/dHuBPvIZOnfcTvNw07e7267KUoO4FfGLvTxU2likorr5gZh1YaCNut6XJkjzwNddkutCXv65H7zOhSn2gl7vMFkUUf+kEM9pSBcA1zf7Y9+7U3HgyD1OH+a5jRIOe0Vy9r3PPaMXuDgsHxZkrVlsr3LgtGwFD0jWMDZtROXds6OXW6/n6cN30IPSf/qWdgduNIq3wj0JbALI5AB0rugNNPhePMVOfF90W9WLPFlxQCjLji8NpvM5341bS8aLhFIgIfRGDgG9AN+I/dZNIwD2J0vfw/BDaLVNc2XUAGLa359Lbz9bFYUp0J5B8hdMMyR6YULaN5alz2VsUC5sD6kPiqTo= on: tags: true - distributions: sdist bdist_wheel --universal + distributions: sdist bdist_wheel skip_existing: true @@ -7,7 +7,7 @@ Something like wget for downloading a file from MediaWiki sites (like Wikipedia or Wikimedia Commons) using only the file name or the URL of its description page. -Requires Python 2.7 or 3.5+. Install with `pip install --user wikiget` or, if you're using +Requires Python 3.5+. Install with `pip install --user wikiget` or, if you're using [Homebrew](https://brew.sh/), `brew tap clpo13/wikiget && brew install wikiget`. ## Usage @@ -85,7 +85,7 @@ executable script. Unit tests can be run with `python setup.py test`. ## License -Copyright (C) 2018, 2019 Cody Logan +Copyright (C) 2018, 2019, 2020 Cody Logan This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1,5 +1,5 @@ # wikiget - CLI tool for downloading files from Wikimedia sites -# Copyright (C) 2018, 2019 Cody Logan +# Copyright (C) 2018, 2019, 2020 Cody Logan # SPDX-License-Identifier: GPL-3.0-or-later # # Wikiget is free software: you can redistribute it and/or modify @@ -45,17 +45,19 @@ setup( 'Development Status :: 4 - Beta', 'Environment :: Console', 'Intended Audience :: End Users/Desktop', - 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', + 'License :: OSI Approved :: GNU General Public License v3 or later ' + '(GPLv3+)', 'Operating System :: OS Independent', - 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Topic :: Utilities', ], - python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*', - install_requires=['future', 'mwclient>=0.10.0', 'pytest-runner', 'requests', 'tqdm'], + python_requires='>=3.5', + install_requires=['future', 'mwclient>=0.10.0', 'pytest-runner', + 'requests', 'tqdm'], tests_require=['pytest'], project_urls={ 'Bug Reports': 'https://github.com/clpo13/wikiget/issues', diff --git a/wikiget/version.py b/wikiget/version.py index 72b7d2f..d4bb133 100644 --- a/wikiget/version.py +++ b/wikiget/version.py @@ -1,3 +1,3 @@ """Sets the program version in setup.py and on the command line.""" -__version__ = '0.2.1' +__version__ = "0.3.0" diff --git a/wikiget/wikiget.py b/wikiget/wikiget.py index a78056c..bdd05a3 100644 --- a/wikiget/wikiget.py +++ b/wikiget/wikiget.py @@ -1,5 +1,5 @@ # wikiget - CLI tool for downloading files from Wikimedia sites -# Copyright (C) 2018, 2019 Cody Logan +# Copyright (C) 2018, 2019, 2020 Cody Logan # SPDX-License-Identifier: GPL-3.0-or-later # # Wikiget is free software: you can redistribute it and/or modify @@ -17,14 +17,6 @@ """Main wikiget functions.""" -from __future__ import absolute_import, division, print_function, unicode_literals - -from builtins import open - -from future import standard_library - -standard_library.install_aliases() - import argparse import hashlib import logging @@ -52,34 +44,42 @@ def main(): """ parser = argparse.ArgumentParser(description=""" - A tool for downloading files from MediaWiki sites - using the file name or description page URL + A tool for downloading files from + MediaWiki sites using the file name or + description page URL """, epilog=""" - Copyright (C) 2018, 2019 Cody Logan. License GPLv3+: GNU GPL - version 3 or later <http://www.gnu.org/licenses/gpl.html>. - This is free software; you are free to change and redistribute - it under certain conditions. There is NO WARRANTY, to the + Copyright (C) 2018, 2019, 2020 Cody Logan. + License GPLv3+: GNU GPL version 3 or later + <http://www.gnu.org/licenses/gpl.html>. + This is free software; you are free to + change and redistribute it under certain + conditions. There is NO WARRANTY, to the extent permitted by law. """) parser.add_argument('FILE', help=""" - name of the file to download with the File: or Image: prefix, - or the URL of its file description page + name of the file to download with the File: or Image: + prefix, or the URL of its file description page """) parser.add_argument('-V', '--version', action='version', version='%(prog)s {}'.format(__version__)) output_options = parser.add_mutually_exclusive_group() - output_options.add_argument('-q', '--quiet', help='suppress warning messages', + output_options.add_argument('-q', '--quiet', + help='suppress warning messages', action='store_true') output_options.add_argument('-v', '--verbose', - help='print detailed information; use -vv for even more detail', - action='count', default=0) - parser.add_argument('-f', '--force', help='force overwriting existing files', + help='print detailed information; use -vv for ' + 'even more detail', action='count', default=0) + parser.add_argument('-f', '--force', + help='force overwriting existing files', action='store_true') parser.add_argument('-s', '--site', default=DEFAULT_SITE, - help='MediaWiki site to download from (default: %(default)s)') + help='MediaWiki site to download from (default: ' + '%(default)s)') parser.add_argument('-o', '--output', help='write download to OUTPUT') - parser.add_argument('-a', '--batch', help='treat FILE as a textfile containing multiple files to download, one URL or filename per line', + parser.add_argument('-a', '--batch', + help='treat FILE as a textfile containing multiple ' + 'files to download, one URL or filename per line', action='store_true') args = parser.parse_args() @@ -98,7 +98,8 @@ def main(): try: fd = open(input_file, 'r') except IOError as e: - print('File could not be read. The following error was encountered:') + print('File could not be read. The following error was ' + 'encountered:') print(e) sys.exit(1) else: @@ -120,7 +121,8 @@ def download(dl, args): site_name = url.netloc if args.site is not DEFAULT_SITE and not args.quiet: # this will work even if the user specifies 'commons.wikimedia.org' - print('Warning: target is a URL, ignoring site specified with --site') + print('Warning: target is a URL, ignoring site specified with ' + '--site') else: filename = dl site_name = args.site @@ -130,7 +132,8 @@ def download(dl, args): # check for valid site parameter if not site_match: - print('Only Wikimedia sites (wikipedia.org and wikimedia.org) are currently supported.') + print('Only Wikimedia sites (wikipedia.org and wikimedia.org) are ' + 'currently supported.') sys.exit(1) # check if this is a valid file @@ -139,10 +142,12 @@ def download(dl, args): filename = file_match.group(2) else: # no file extension and/or prefix, probably an article - print('Downloading Wikipedia articles is not currently supported.', end='') + print('Downloading Wikipedia articles is not currently supported.', + end='') if file_match and not file_match.group(1): # file extension detected, but no prefix - # TODO: no longer possible to get to this point since file_match is None with no prefix + # TODO: no longer possible to get to this point since file_match is + # None with no prefix print(" If this is a file, please add the 'File:' prefix.") else: print('\n', end='') @@ -159,7 +164,8 @@ def download(dl, args): try: site = Site(site_name, clients_useragent=USER_AGENT) except ConnectionError: - # usually this means there is no such site, or there's no network connection + # usually this means there is no such site, or there's no network + # connection print("Error: couldn't connect to specified site.") sys.exit(1) except InvalidResponse as e: @@ -178,7 +184,8 @@ def download(dl, args): if args.verbose >= 1: print("Info: downloading '{}' " - "({} bytes) from {}".format(filename, file_size, site.host), end='') + '({} bytes) from {}'.format(filename, file_size, site.host), + end='') if args.output: print(" to '{}'".format(dest)) else: @@ -186,12 +193,14 @@ def download(dl, args): print('Info: {}'.format(file_url)) if os.path.isfile(dest) and not args.force: - print("File '{}' already exists, skipping download (use -f to ignore)".format(dest)) + print("File '{}' already exists, skipping download (use -f to " + "ignore)".format(dest)) else: try: fd = open(dest, 'wb') except IOError as e: - print('File could not be written. The following error was encountered:') + print('File could not be written. The following error was ' + 'encountered:') print(e) sys.exit(1) else: @@ -221,15 +230,16 @@ def download(dl, args): else: # no file information returned - print("Target '{}' does not appear to be a valid file.".format(filename)) + print("Target '{}' does not appear to be a valid file." + .format(filename)) sys.exit(1) def valid_file(search_string): """ - Determines if the given string contains a valid file name, defined as a string - ending with a '.' and at least one character, beginning with 'File:' or - 'Image:', the standard file prefixes in MediaWiki. + Determines if the given string contains a valid file name, defined as a + string ending with a '.' and at least one character, beginning with 'File:' + or 'Image:', the standard file prefixes in MediaWiki. :param search_string: string to validate :returns: a regex Match object if there's a match or None otherwise """ @@ -241,10 +251,10 @@ def valid_file(search_string): def valid_site(search_string): """ - Determines if the given string contains a valid site name, defined as a string - ending with 'wikipedia.org' or 'wikimedia.org'. This covers all subdomains of - those domains. Eventually, it should be possible to support any MediaWiki site, - regardless of domain name. + Determines if the given string contains a valid site name, defined as a + string ending with 'wikipedia.org' or 'wikimedia.org'. This covers all + subdomains of those domains. Eventually, it should be possible to support + any MediaWiki site, regardless of domain name. :param search_string: string to validate :returns: a regex Match object if there's a match or None otherwise """ @@ -254,7 +264,8 @@ def valid_site(search_string): def verify_hash(filename): """ - Calculates the SHA1 hash of the given file for comparison with a known value. + Calculates the SHA1 hash of the given file for comparison with a known + value. :param filename: name of the file to calculate a hash for :return: hash digest """ |
