jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/430608 )
Change subject: tox.ini: Enable E402 and disable I201 checks ......................................................................
tox.ini: Enable E402 and disable I201 checks
Check that imports are at the top of the modules by enabling E402 checks. Fix exising errors. Note that according to current rules, conditional imports (inside if-else blocks) should come after normal imports.
bot.py, i18n.py, terminal_interface_base.py: Change the `from pywikibot import config` line to `from pywikibot import config2 as config`. This is to avoid circular imports within pywikibot.
Disable I201 checks. Grouping imports by package name is not a PEP8 recommendation and may confuse newcomers.
With I201 being disabled, there is no other usage of flake8-import-order package. Remove it from flake8 dependencies.
Move some __all__ variables to top, right after the __future__ imports. (PEP8)
Bug: T87409 Bug: T166950 Change-Id: I1acd2a607828d778eae611f1abdb8ab4a124de44 --- M docs/conf.py M generate_family_file.py M generate_user_files.py M pywikibot/__init__.py M pywikibot/bot.py M pywikibot/botirc.py M pywikibot/comms/http.py M pywikibot/comms/threadedhttp.py M pywikibot/config2.py M pywikibot/data/sparql.py M pywikibot/data/wikistats.py M pywikibot/diff.py M pywikibot/family.py M pywikibot/i18n.py M pywikibot/page.py M pywikibot/textlib.py M pywikibot/tools/__init__.py M pywikibot/userinterfaces/gui.py M pywikibot/userinterfaces/terminal_interface_base.py M pywikibot/weblib.py M scripts/data_ingestion.py M scripts/flickrripper.py M scripts/harvest_template.py M scripts/maintenance/diff_checker.py M scripts/replace.py M setup.py M tests/__init__.py M tests/aspects.py M tests/tk_tests.py M tests/ui_tests.py M tests/utils.py M tests/weblib_tests.py M tests/weblinkchecker_tests.py M tox.ini 34 files changed, 246 insertions(+), 284 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/docs/conf.py b/docs/conf.py index 4d067db..fb67bf4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -21,6 +21,9 @@ from os.path import abspath, dirname, join import sys
+from scripts.cosmetic_changes import warning + + # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. @@ -28,8 +31,6 @@ repo_dir = abspath(join(docs_dir, '..')) sys.path.insert(0, repo_dir) os.chdir(repo_dir) - -from scripts.cosmetic_changes import warning
# -- General configuration -----------------------------------------------------
diff --git a/generate_family_file.py b/generate_family_file.py index 6c346de..80a62d2 100755 --- a/generate_family_file.py +++ b/generate_family_file.py @@ -15,6 +15,8 @@ import os import sys
+from pywikibot.site_detect import MWSite as Wiki + # creating & retrieving urls if sys.version_info[0] > 2: from urllib.parse import urlparse @@ -22,12 +24,11 @@ else: from urlparse import urlparse
+ # Disable user-config checks so the family can be created first, # and then used when generating the user-config _orig_no_user_config = os.environ.get('PYWIKIBOT2_NO_USER_CONFIG') os.environ['PYWIKIBOT2_NO_USER_CONFIG'] = '2' - -from pywikibot.site_detect import MWSite as Wiki
# Reset this flag in case another script is run by pwb after this script if not _orig_no_user_config: diff --git a/generate_user_files.py b/generate_user_files.py index 77bd611..6ddb9f6 100755 --- a/generate_user_files.py +++ b/generate_user_files.py @@ -17,13 +17,13 @@ from textwrap import fill from warnings import warn
+import pywikibot +from pywikibot import config + + # Disable user-config usage as we are creating it here _orig_no_user_config = os.environ.get('PYWIKIBOT2_NO_USER_CONFIG') os.environ['PYWIKIBOT2_NO_USER_CONFIG'] = '2' - -import pywikibot - -from pywikibot import config
# Reset this flag in case another script is run by pwb after this script if not _orig_no_user_config: diff --git a/pywikibot/__init__.py b/pywikibot/__init__.py index 62080b9..b64f7ba 100644 --- a/pywikibot/__init__.py +++ b/pywikibot/__init__.py @@ -12,30 +12,15 @@
import atexit import datetime +from decimal import Decimal import math import re import sys import threading
-from decimal import Decimal - -if sys.version_info[0] > 2: - from queue import Queue - long = int - basestring = str -else: - from Queue import Queue - from warnings import warn
-# logging must be imported first so that other modules can -# use these logging methods during the initialisation sequence. -from pywikibot.logging import ( - critical, debug, error, exception, log, output, stdout, warning -) - -from pywikibot import config2 as config - +from pywikibot._wbtypes import WbRepresentation as _WbRepresentation from pywikibot.bot import ( input, input_choice, input_yn, inputChoice, handle_args, showHelp, ui, calledModuleName, Bot, CurrentPageBot, WikidataBot, @@ -45,6 +30,7 @@ from pywikibot.bot_choice import ( QuitKeyboardInterrupt as _QuitKeyboardInterrupt, ) +from pywikibot import config2 as config from pywikibot.data.api import UploadWarning as _UploadWarning from pywikibot.diff import PatchManager from pywikibot.exceptions import ( @@ -65,7 +51,11 @@ ) from pywikibot.family import Family from pywikibot.i18n import translate +from pywikibot.logging import ( + critical, debug, error, exception, log, output, stdout, warning +) from pywikibot.site import BaseSite +import pywikibot.textlib as textlib from pywikibot.tools import ( # __ to avoid conflict with ModuleDeprecationWrapper._deprecated classproperty, @@ -80,7 +70,14 @@ ) from pywikibot.tools.formatter import color_format
-import pywikibot.textlib as textlib + +if sys.version_info[0] > 2: + from queue import Queue + long = int + basestring = str +else: + from Queue import Queue +
textlib_methods = ( 'unescape', 'replaceExcept', 'removeDisabledParts', 'removeHTMLParts', @@ -254,9 +251,6 @@ newdt.tzinfo) else: return newdt - - -from pywikibot._wbtypes import WbRepresentation as _WbRepresentation
class Coordinate(_WbRepresentation): @@ -1293,7 +1287,7 @@
# These imports depend on Wb* classes above. -from pywikibot.page import ( +from pywikibot.page import ( # noqa: E402 Page, FilePage, Category, @@ -1303,7 +1297,8 @@ PropertyPage, Claim, ) -from pywikibot.page import html2unicode, url2unicode, unicode2html +from pywikibot.page import ( # noqa: E402 + html2unicode, url2unicode, unicode2html)
link_regex = re.compile(r'[[(?P<title>[^]|[<>{}]*)(|.*?)?]]') diff --git a/pywikibot/bot.py b/pywikibot/bot.py index 94259e8..6d95901 100644 --- a/pywikibot/bot.py +++ b/pywikibot/bot.py @@ -58,6 +58,29 @@ # class definition that can be subclassed to create new, functional bot # scripts, instead of writing each one from scratch.
+__all__ = ( + 'CRITICAL', 'ERROR', 'INFO', 'WARNING', 'DEBUG', 'INPUT', 'STDOUT', + 'VERBOSE', 'critical', 'debug', 'error', 'exception', 'log', 'warning', + 'output', 'stdout', 'LoggingFormatter', 'RotatingFileHandler', + 'init_handlers', 'writelogheader', + 'input', 'input_choice', 'input_yn', 'inputChoice', 'input_list_choice', + 'Option', 'StandardOption', 'NestedOption', 'IntegerOption', + 'ContextOption', 'ListOption', 'OutputProxyOption', + 'HighlightContextOption', 'ChoiceException', 'UnhandledAnswer', + 'Choice', 'AlwaysChoice', + 'QuitKeyboardInterrupt', + 'InteractiveReplace', + 'calledModuleName', 'handle_args', 'handleArgs', + 'showHelp', 'suggest_help', + 'writeToCommandLogFile', 'open_webbrowser', + 'OptionHandler', + 'BaseBot', 'Bot', 'SingleSiteBot', 'MultipleSitesBot', + 'CurrentPageBot', 'AutomaticTWSummaryBot', + 'ExistingPageBot', 'FollowRedirectPageBot', 'CreatingPageBot', + 'RedirectPageBot', 'NoRedirectPageBot', + 'WikidataBot', +) + # Note: all output goes thru python std library "logging" module
import codecs @@ -69,15 +92,11 @@ import sys import time import warnings +from warnings import warn import webbrowser
-from warnings import warn - -_logger = "bot" - import pywikibot - -from pywikibot import config +from pywikibot import config2 as config from pywikibot import daemonize from pywikibot import i18n from pywikibot import version @@ -104,28 +123,8 @@ ) from pywikibot.tools.formatter import color_format
-__all__ = ( - 'CRITICAL', 'ERROR', 'INFO', 'WARNING', 'DEBUG', 'INPUT', 'STDOUT', - 'VERBOSE', 'critical', 'debug', 'error', 'exception', 'log', 'warning', - 'output', 'stdout', 'LoggingFormatter', 'RotatingFileHandler', - 'init_handlers', 'writelogheader', - 'input', 'input_choice', 'input_yn', 'inputChoice', 'input_list_choice', - 'Option', 'StandardOption', 'NestedOption', 'IntegerOption', - 'ContextOption', 'ListOption', 'OutputProxyOption', - 'HighlightContextOption', 'ChoiceException', 'UnhandledAnswer', - 'Choice', 'AlwaysChoice', - 'QuitKeyboardInterrupt', - 'InteractiveReplace', - 'calledModuleName', 'handle_args', 'handleArgs', - 'showHelp', 'suggest_help', - 'writeToCommandLogFile', 'open_webbrowser', - 'OptionHandler', - 'BaseBot', 'Bot', 'SingleSiteBot', 'MultipleSitesBot', - 'CurrentPageBot', 'AutomaticTWSummaryBot', - 'ExistingPageBot', 'FollowRedirectPageBot', 'CreatingPageBot', - 'RedirectPageBot', 'NoRedirectPageBot', - 'WikidataBot', -) + +_logger = 'bot'
if not PY2: unicode = str diff --git a/pywikibot/botirc.py b/pywikibot/botirc.py index ae630ee..c75e968 100644 --- a/pywikibot/botirc.py +++ b/pywikibot/botirc.py @@ -20,6 +20,8 @@
import re
+import pywikibot + try: from ircbot import SingleServerIRCBot except ImportError as e: @@ -35,8 +37,6 @@
_logger = "botirc" - -import pywikibot
class IRCBot(pywikibot.Bot, SingleServerIRCBot): diff --git a/pywikibot/comms/http.py b/pywikibot/comms/http.py index dccfb23..ed253ef 100644 --- a/pywikibot/comms/http.py +++ b/pywikibot/comms/http.py @@ -29,6 +29,24 @@
import requests
+from pywikibot import __release__ +from pywikibot.bot import calledModuleName +from pywikibot.comms import threadedhttp +from pywikibot import config +from pywikibot.exceptions import ( + FatalServerError, Server504Error, Server414Error +) +from pywikibot.logging import critical, debug, error, log, warning +from pywikibot.tools import ( + deprecated, + deprecate_arg, + file_mode_checker, + issue_deprecation_warning, + PY2, + StringTypes, +) +import pywikibot.version + try: import requests_oauthlib except ImportError as e: @@ -42,25 +60,6 @@ from urllib2 import quote from urlparse import urlparse
-from pywikibot import config - -from pywikibot import __release__ -from pywikibot.bot import calledModuleName -from pywikibot.comms import threadedhttp -from pywikibot.exceptions import ( - FatalServerError, Server504Error, Server414Error -) -from pywikibot.logging import critical, debug, error, log, warning -from pywikibot.tools import ( - deprecated, - deprecate_arg, - file_mode_checker, - issue_deprecation_warning, - PY2, - StringTypes, -) - -import pywikibot.version
# The error message for failed SSL certificate verification # 'certificate verify failed' is a commonly detectable string diff --git a/pywikibot/comms/threadedhttp.py b/pywikibot/comms/threadedhttp.py index 4eadb57..7bab2f0 100644 --- a/pywikibot/comms/threadedhttp.py +++ b/pywikibot/comms/threadedhttp.py @@ -15,14 +15,14 @@ import re import sys
+import pywikibot +from pywikibot.tools import deprecated, UnicodeMixin + if sys.version_info[0] > 2: from urllib.parse import urlparse else: from urlparse import urlparse
-import pywikibot - -from pywikibot.tools import deprecated, UnicodeMixin
_logger = "comm.threadedhttp"
diff --git a/pywikibot/config2.py b/pywikibot/config2.py index 1ec7e93..f621da6 100644 --- a/pywikibot/config2.py +++ b/pywikibot/config2.py @@ -49,10 +49,9 @@
from distutils.version import StrictVersion from locale import getdefaultlocale +from warnings import warn
from requests import __version__ as requests_version - -from warnings import warn
from pywikibot.logging import error, output, warning from pywikibot.tools import PY2 diff --git a/pywikibot/data/sparql.py b/pywikibot/data/sparql.py index 13ec4ca..1453c8d 100644 --- a/pywikibot/data/sparql.py +++ b/pywikibot/data/sparql.py @@ -10,10 +10,6 @@ import json import sys import time -if sys.version_info[0] > 2: - from urllib.parse import quote -else: - from urllib2 import quote
from requests.exceptions import Timeout
@@ -22,6 +18,12 @@ from pywikibot.tools import UnicodeMixin, py2_encode_utf_8 from pywikibot.exceptions import Error, TimeoutError
+if sys.version_info[0] > 2: + from urllib.parse import quote +else: + from urllib2 import quote + + DEFAULT_HEADERS = {'cache-control': 'no-cache', 'Accept': 'application/sparql-results+json'}
diff --git a/pywikibot/data/wikistats.py b/pywikibot/data/wikistats.py index adeef39..f33b117 100644 --- a/pywikibot/data/wikistats.py +++ b/pywikibot/data/wikistats.py @@ -7,10 +7,10 @@ from __future__ import absolute_import, unicode_literals
import sys - from io import BytesIO, StringIO
import pywikibot +from pywikibot.comms import http
if sys.version_info[0] > 2: import csv @@ -23,8 +23,6 @@ 'WikiStats: unicodecsv package required for using csv in Python 2;' ' falling back to using the larger XML datasets.') csv = None - -from pywikibot.comms import http
class WikiStats(object): diff --git a/pywikibot/diff.py b/pywikibot/diff.py index 4556c1f..52a92c8 100644 --- a/pywikibot/diff.py +++ b/pywikibot/diff.py @@ -13,16 +13,16 @@
from collections import Sequence from difflib import _format_range_unified as format_range_unified + +import pywikibot +from pywikibot.tools import chars +from pywikibot.tools import deprecated_args +from pywikibot.tools.formatter import color_format + if sys.version_info[0] > 2: from itertools import zip_longest else: from itertools import izip_longest as zip_longest - -import pywikibot -from pywikibot.tools import chars - -from pywikibot.tools import deprecated_args -from pywikibot.tools.formatter import color_format
class Hunk(object): diff --git a/pywikibot/family.py b/pywikibot/family.py index 936fbb9..6da09b9 100644 --- a/pywikibot/family.py +++ b/pywikibot/family.py @@ -8,20 +8,13 @@ from __future__ import absolute_import, unicode_literals
import collections +from importlib import import_module import logging +from os.path import basename, dirname, splitext import re import string import sys import warnings - -PY3 = sys.version_info[0] > 2 -if PY3: - import urllib.parse as urlparse -else: - import urlparse - -from os.path import basename, dirname, splitext -from importlib import import_module from warnings import warn
import pywikibot @@ -33,6 +26,13 @@ FrozenDict, )
+PY3 = sys.version_info[0] > 2 +if PY3: + import urllib.parse as urlparse +else: + import urlparse + + logger = logging.getLogger("pywiki.wiki.family")
# Legal characters for Family.name and Family.langs keys diff --git a/pywikibot/i18n.py b/pywikibot/i18n.py index 22be4a2..700c311 100644 --- a/pywikibot/i18n.py +++ b/pywikibot/i18n.py @@ -34,7 +34,7 @@ import pywikibot
from pywikibot import __url__ -from pywikibot import config +from pywikibot import config2 as config from pywikibot.exceptions import Error from pywikibot.plural import plural_rules from pywikibot.tools import ( diff --git a/pywikibot/page.py b/pywikibot/page.py index 599ad48..de1b2e3 100644 --- a/pywikibot/page.py +++ b/pywikibot/page.py @@ -32,7 +32,29 @@ from collections import Counter, defaultdict, namedtuple, OrderedDict from warnings import warn
-from pywikibot.tools import PY2 +import pywikibot +from pywikibot.comms import http +from pywikibot import config +from pywikibot.exceptions import ( + AutoblockUser, + NotEmailableError, + SiteDefinitionError, + UserRightsError, +) +from pywikibot.data.api import APIError +from pywikibot.family import Family +from pywikibot.site import DataSite, Namespace, need_version +from pywikibot import textlib +from pywikibot.tools import ( + compute_file_hash, + MediaWikiVersion, UnicodeMixin, ComparableMixin, DotReadableDict, + deprecated, deprecate_arg, deprecated_args, issue_deprecation_warning, + add_full_name, manage_wrapping, + ModuleDeprecationWrapper as _ModuleDeprecationWrapper, PY2, + first_upper, redirect_func, remove_last_args, _NotImplementedWarning, +) +from pywikibot.tools.ip import ip_regexp +from pywikibot.tools.ip import is_IP
if not PY2: unicode = basestring = str @@ -48,31 +70,6 @@ import htmlentitydefs from urllib import quote as quote_from_bytes, unquote as unquote_to_bytes
-import pywikibot - -from pywikibot import config -from pywikibot import textlib - -from pywikibot.comms import http -from pywikibot.exceptions import ( - AutoblockUser, - NotEmailableError, - SiteDefinitionError, - UserRightsError, -) -from pywikibot.data.api import APIError -from pywikibot.family import Family -from pywikibot.site import DataSite, Namespace, need_version -from pywikibot.tools import ( - compute_file_hash, - MediaWikiVersion, UnicodeMixin, ComparableMixin, DotReadableDict, - deprecated, deprecate_arg, deprecated_args, issue_deprecation_warning, - add_full_name, manage_wrapping, - ModuleDeprecationWrapper as _ModuleDeprecationWrapper, - first_upper, redirect_func, remove_last_args, _NotImplementedWarning, -) -from pywikibot.tools.ip import ip_regexp -from pywikibot.tools.ip import is_IP
__all__ = ( 'BasePage', diff --git a/pywikibot/textlib.py b/pywikibot/textlib.py index 9e27312..5d3b445 100644 --- a/pywikibot/textlib.py +++ b/pywikibot/textlib.py @@ -18,6 +18,19 @@ import re import sys
+import pywikibot +from pywikibot import config2 as config +from pywikibot.exceptions import InvalidTitle +from pywikibot.family import Family +from pywikibot.tools import ( + deprecate_arg, + deprecated, + DeprecatedRegex, + StringTypes, + UnicodeType, + issue_deprecation_warning +) + if sys.version_info[0] > 2: from html.parser import HTMLParser basestring = (str,) @@ -30,19 +43,6 @@ except ImportError as e: mwparserfromhell = e
-import pywikibot - -from pywikibot import config2 as config -from pywikibot.exceptions import InvalidTitle -from pywikibot.family import Family -from pywikibot.tools import ( - deprecate_arg, - deprecated, - DeprecatedRegex, - StringTypes, - UnicodeType, - issue_deprecation_warning -)
# cache for replaceExcept to avoid recompile or regexes each call _regex_cache = {} diff --git a/pywikibot/tools/__init__.py b/pywikibot/tools/__init__.py index d4ce8a4..6ef05c5 100644 --- a/pywikibot/tools/__init__.py +++ b/pywikibot/tools/__init__.py @@ -25,21 +25,19 @@ from functools import wraps from warnings import catch_warnings, showwarning, warn
+from pywikibot.logging import debug + PYTHON_VERSION = sys.version_info[:3] PY2 = (PYTHON_VERSION[0] == 2)
if not PY2: import queue as Queue - StringTypes = basestring = (str,) UnicodeType = unicode = str else: import Queue - StringTypes = types.StringTypes UnicodeType = types.UnicodeType - -from pywikibot.logging import debug
try: import bz2 @@ -51,6 +49,7 @@ warn('package bz2 and bz2file were not found', ImportWarning) bz2 = bz2_import_error
+ if PYTHON_VERSION < (3, 5): # although deprecated in 3 completely no message was emitted until 3.5 ArgSpec = inspect.ArgSpec diff --git a/pywikibot/userinterfaces/gui.py b/pywikibot/userinterfaces/gui.py index 8721899..4c58de9 100644 --- a/pywikibot/userinterfaces/gui.py +++ b/pywikibot/userinterfaces/gui.py @@ -17,6 +17,10 @@
import sys
+import pywikibot +from pywikibot import __url__ +from pywikibot.tools import PY2, UnicodeType + if sys.version_info[0] > 2: import tkinter as Tkinter from tkinter.scrolledtext import ScrolledText @@ -40,11 +44,6 @@ from idlelib import SearchDialog, ReplaceDialog, configDialog from idlelib.configHandler import idleConf from idlelib.MultiCall import MultiCallCreator - -import pywikibot - -from pywikibot import __url__ -from pywikibot.tools import PY2, UnicodeType
class TextEditor(ScrolledText): diff --git a/pywikibot/userinterfaces/terminal_interface_base.py b/pywikibot/userinterfaces/terminal_interface_base.py index d854340..f36c77a 100755 --- a/pywikibot/userinterfaces/terminal_interface_base.py +++ b/pywikibot/userinterfaces/terminal_interface_base.py @@ -15,9 +15,7 @@ import threading
import pywikibot - -from pywikibot import config - +from pywikibot import config2 as config from pywikibot.bot import VERBOSE, INFO, STDOUT, INPUT, WARNING from pywikibot.bot_choice import ( Option, OutputOption, StandardOption, ChoiceException, QuitKeyboardInterrupt, diff --git a/pywikibot/weblib.py b/pywikibot/weblib.py index 87494fa..e5318b9 100644 --- a/pywikibot/weblib.py +++ b/pywikibot/weblib.py @@ -12,17 +12,17 @@ from time import sleep import xml.etree.ElementTree as ET
-if sys.version_info[0] > 2: - from urllib.parse import urlencode -else: - from urllib import urlencode - from requests.exceptions import ConnectionError as RequestsConnectionError
from pywikibot.comms import http from pywikibot import config2 from pywikibot.tools import deprecated
+if sys.version_info[0] > 2: + from urllib.parse import urlencode +else: + from urllib import urlencode +
@deprecated('memento_client package') def getInternetArchiveURL(url, timestamp=None): diff --git a/scripts/data_ingestion.py b/scripts/data_ingestion.py index 48e98b4..198b55c 100755 --- a/scripts/data_ingestion.py +++ b/scripts/data_ingestion.py @@ -19,24 +19,20 @@ import hashlib import io import os -import sys - import posixpath +import sys +from warnings import warn + +import pywikibot +from pywikibot.comms.http import fetch +from pywikibot import pagegenerators +from pywikibot.specialbots import UploadRobot +from pywikibot.tools import deprecated, deprecated_args
if sys.version_info[0] > 2: import csv else: import unicodecsv as csv - -from warnings import warn - -import pywikibot - -from pywikibot import pagegenerators - -from pywikibot.comms.http import fetch -from pywikibot.specialbots import UploadRobot -from pywikibot.tools import deprecated, deprecated_args
if sys.version_info[0] > 2: from urllib.parse import urlparse diff --git a/scripts/flickrripper.py b/scripts/flickrripper.py index 83c21ba..e6d8004 100755 --- a/scripts/flickrripper.py +++ b/scripts/flickrripper.py @@ -39,6 +39,16 @@ import sys import time
+import pywikibot +from pywikibot import config, textlib +from pywikibot.comms.http import fetch +from pywikibot.specialbots import UploadRobot + +try: + from pywikibot.userinterfaces.gui import Tkdialog +except ImportError as _tk_error: + Tkdialog = _tk_error + if sys.version_info[0] > 2: from urllib.parse import urlencode else: @@ -51,18 +61,6 @@ 'See: http://stuvel.eu/projects/flickrapi') print(e) sys.exit(1) - -import pywikibot - -from pywikibot import config, textlib -from pywikibot.comms.http import fetch - -from pywikibot.specialbots import UploadRobot - -try: - from pywikibot.userinterfaces.gui import Tkdialog -except ImportError as _tk_error: - Tkdialog = _tk_error
flickr_allowed_license = { diff --git a/scripts/harvest_template.py b/scripts/harvest_template.py index e0418c5..7014f85 100755 --- a/scripts/harvest_template.py +++ b/scripts/harvest_template.py @@ -86,6 +86,11 @@
import signal
+import pywikibot +from pywikibot import pagegenerators as pg, textlib +from pywikibot.bot import WikidataBot, OptionHandler + + willstop = False
@@ -100,10 +105,6 @@
signal.signal(signal.SIGINT, _signal_handler) - -import pywikibot -from pywikibot import pagegenerators as pg, textlib -from pywikibot.bot import WikidataBot, OptionHandler
docuReplacements = {'¶ms;': pywikibot.pagegenerators.parameterHelp}
diff --git a/scripts/maintenance/diff_checker.py b/scripts/maintenance/diff_checker.py index a055143..50fb78e 100644 --- a/scripts/maintenance/diff_checker.py +++ b/scripts/maintenance/diff_checker.py @@ -29,14 +29,15 @@ from re import compile as re_compile, IGNORECASE from subprocess import check_output from sys import version_info + +from unidiff import PatchSet + if version_info.major == 3: PY2 = False from tokenize import tokenize, STRING else: PY2 = True from tokenize import generate_tokens as tokenize, STRING - -from unidiff import PatchSet
# Regexp for a line that is allowed to be longer than the limit. diff --git a/scripts/replace.py b/scripts/replace.py index f281e77..6ad8c62 100755 --- a/scripts/replace.py +++ b/scripts/replace.py @@ -144,34 +144,30 @@ import time import warnings
-if sys.version_info[0] > 2: - from queue import Queue - long = int -else: - from Queue import Queue - import pywikibot - -from pywikibot.exceptions import ArgumentDeprecationWarning -from pywikibot import i18n, textlib, pagegenerators, Bot - from pywikibot import editor as editarticle - +from pywikibot.exceptions import ArgumentDeprecationWarning # Imports predefined replacements tasks from fixes.py from pywikibot import fixes - +from pywikibot import i18n, textlib, pagegenerators, Bot from pywikibot.tools import ( chars, deprecated, deprecated_args, issue_deprecation_warning, ) - from pywikibot.tools.formatter import color_format
if sys.version_info[0] > 2: + from queue import Queue + long = int +else: + from Queue import Queue + +if sys.version_info[0] > 2: basestring = (str, )
+ # This is required for the text that is shown when you run this script # with the parameter -help. docuReplacements = { diff --git a/setup.py b/setup.py index fb19abb..6214252 100644 --- a/setup.py +++ b/setup.py @@ -11,12 +11,15 @@ import os import sys
+from setuptools import find_packages, setup + try: # Work around a traceback on Python < 2.7.4 and < 3.3.1 # http://bugs.python.org/issue15881#msg170215 import multiprocessing except ImportError: pass +
# pyflakes workaround __unused__ = (multiprocessing, ) @@ -163,8 +166,6 @@ test_deps += extra_deps['csv'] else: test_deps += ['six'] - -from setuptools import setup, find_packages
name = 'pywikibot' version = '3.0' diff --git a/tests/__init__.py b/tests/__init__.py index 5050b9f..90ea92d 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -7,12 +7,12 @@ # from __future__ import absolute_import, print_function, unicode_literals
+__all__ = ('requests', 'unittest', 'TestRequest', + 'patch_request', 'unpatch_request', 'mock', 'Mock', 'patch') + import functools import os import warnings - -__all__ = ('requests', 'unittest', 'TestRequest', - 'patch_request', 'unpatch_request', 'mock', 'Mock', 'patch')
# Verify that the unit tests have a base working environment: # - requests is mandatory @@ -21,6 +21,11 @@ # - mwparserfromhell is optional, so is only imported in textlib_tests import requests
+from pywikibot import config +import pywikibot.data.api +from pywikibot.data.api import CachedRequest +from pywikibot.data.api import Request as _original_Request +from pywikibot import i18n from pywikibot.tools import PYTHON_VERSION
if PYTHON_VERSION == (2, 7, 2): @@ -34,14 +39,6 @@ except ImportError: import mock from mock import Mock, patch - -import pywikibot.data.api - -from pywikibot import config -from pywikibot import i18n - -from pywikibot.data.api import CachedRequest -from pywikibot.data.api import Request as _original_Request
_root_dir = os.path.split(os.path.split(__file__)[0])[0]
diff --git a/tests/aspects.py b/tests/aspects.py index 268e460..5af26b2 100644 --- a/tests/aspects.py +++ b/tests/aspects.py @@ -12,20 +12,17 @@ # Distributed under the terms of the MIT license. # from __future__ import absolute_import, print_function, unicode_literals -""" - TODO: - - skip if the user is blocked. - sysop flag, implement in site & page, and - possibly some of the script tests. - slow flag - weblib - also slow - (this class, and a FastTest, could error/pass based - it consumed more than a specified amount of time allowed.) - net flag should disable network libraries - UITestCase: - Not integrated; direct subclass of unittest.TestCase. -""" +# TODO: +# skip if the user is blocked. +# sysop flag, implement in site & page, and +# possibly some of the script tests. +# slow flag +# weblib - also slow +# (this class, and a FastTest, could error/pass based +# it consumed more than a specified amount of time allowed.) +# net flag should disable network libraries +# UITestCase: +# Not integrated; direct subclass of unittest.TestCase. import inspect import itertools import os diff --git a/tests/tk_tests.py b/tests/tk_tests.py index 0fee1b4..84cb52c 100644 --- a/tests/tk_tests.py +++ b/tests/tk_tests.py @@ -9,7 +9,10 @@
import os
+import pywikibot from pywikibot.tools import PY2 +from tests.aspects import unittest, TestCase, DefaultSiteTestCase +
if os.environ.get('PYWIKIBOT2_TEST_GUI', '0') == '1': if not PY2: @@ -17,10 +20,6 @@ else: import Tkinter from pywikibot.userinterfaces.gui import EditBoxWindow, Tkdialog - -import pywikibot - -from tests.aspects import unittest, TestCase, DefaultSiteTestCase
class TestTkdialog(TestCase): diff --git a/tests/ui_tests.py b/tests/ui_tests.py index 3a98f9c..861a235 100644 --- a/tests/ui_tests.py +++ b/tests/ui_tests.py @@ -35,6 +35,20 @@ import time import warnings
+import pywikibot +from pywikibot.bot import ( + ui, DEBUG, VERBOSE, INFO, STDOUT, INPUT, WARNING, ERROR, CRITICAL +) +from pywikibot.tools import ( + PY2, + UnicodeType as unicode, +) +from pywikibot.userinterfaces import ( + terminal_interface_win32, terminal_interface_base, terminal_interface_unix, +) +from tests.aspects import TestCase +from tests.utils import unittest, FakeModule + if os.name == "nt": from multiprocessing.managers import BaseManager import threading @@ -53,22 +67,6 @@ import win32clipboard except ImportError: win32clipboard = None - -import pywikibot - -from pywikibot.bot import ( - ui, DEBUG, VERBOSE, INFO, STDOUT, INPUT, WARNING, ERROR, CRITICAL -) -from pywikibot.tools import ( - PY2, - UnicodeType as unicode, -) -from pywikibot.userinterfaces import ( - terminal_interface_win32, terminal_interface_base, terminal_interface_unix, -) - -from tests.aspects import TestCase -from tests.utils import unittest, FakeModule
class Stream(object): diff --git a/tests/utils.py b/tests/utils.py index 8178427..572c3a0 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -20,28 +20,24 @@ from collections import Mapping from types import ModuleType
-from pywikibot.tools import PY2 +import pywikibot +from pywikibot.comms import threadedhttp +from pywikibot import config +from pywikibot.data.api import CachedRequest, APIError +from pywikibot.data.api import Request as _original_Request +from pywikibot.site import Namespace +from pywikibot.tools import ( + PY2, PYTHON_VERSION, + UnicodeType as unicode, +) +from tests import _pwb_py +from tests import unittest
if not PY2: import six else: ResourceWarning = None # flake8: F821
-import pywikibot - -from pywikibot import config - -from pywikibot.comms import threadedhttp -from pywikibot.data.api import CachedRequest, APIError -from pywikibot.data.api import Request as _original_Request -from pywikibot.site import Namespace -from pywikibot.tools import ( - PYTHON_VERSION, - UnicodeType as unicode, -) - -from tests import _pwb_py -from tests import unittest
OSWIN32 = (sys.platform == 'win32')
diff --git a/tests/weblib_tests.py b/tests/weblib_tests.py index fe4982a..6cba091 100644 --- a/tests/weblib_tests.py +++ b/tests/weblib_tests.py @@ -10,16 +10,14 @@ from requests.exceptions import ConnectionError as RequestsConnectionError
from pywikibot.tools import PY2 +import pywikibot.weblib as weblib +from tests.aspects import unittest, DeprecationTestCase +from tests.utils import PatchedHttp
if not PY2: from urllib.parse import urlparse else: from urlparse import urlparse - -import pywikibot.weblib as weblib - -from tests.aspects import unittest, DeprecationTestCase -from tests.utils import PatchedHttp
class TestInternetArchive(DeprecationTestCase): diff --git a/tests/weblinkchecker_tests.py b/tests/weblinkchecker_tests.py index e6a46ce..c62b235 100644 --- a/tests/weblinkchecker_tests.py +++ b/tests/weblinkchecker_tests.py @@ -12,15 +12,14 @@ from requests import ConnectionError as RequestsConnectionError
from pywikibot.tools import PY2 +from scripts import weblinkchecker +from tests.aspects import unittest, require_modules, TestCase +from tests import weblib_tests + if not PY2: from urllib.parse import urlparse else: from urlparse import urlparse - -from scripts import weblinkchecker - -from tests.aspects import unittest, require_modules, TestCase -from tests import weblib_tests
@require_modules('memento_client') diff --git a/tox.ini b/tox.ini index 9e092a8..915235d 100644 --- a/tox.ini +++ b/tox.ini @@ -64,7 +64,6 @@ flake8-comprehensions flake8-future-import flake8-string-format - flake8-import-order flake8-tuple>=0.2.8 flake8-print>=2.0.1 flake8-mock>=0.3 @@ -148,14 +147,13 @@ # H236: Mandatory use of six for Python 2 & 3 metaclass support # H404: docstring multiline start # H405: docstring summary line -# H301,I100,I101,202: import order rules; Pywikibot uses rules H306 and I201 +# H301: Do not import more than one module per line; Pywikibot uses H306 (Alphabetically order your imports by the full module path) # W503: line break before binary operator; against current PEP 8 recommendation # P101: format string does contain unindexed parameters
# The following are to be fixed # D102: Missing docstring in public method # D103: Missing docstring in public function -# E402: module level import not at top of file; see T87409 # N802, N803, N806 : naming convention # P102,P103: string does contain unindexed parameters; see I36355923
@@ -164,7 +162,7 @@ # D413: Missing blank line after last section # D412: No blank lines allowed between a section header and its content
-ignore = E402,D105,D211,FI10,FI12,FI13,FI15,FI16,FI17,FI5,H101,H236,H301,H404,H405,H903,I100,I101,I202,N802,N803,N806,D401,D413,D103,D412,P101,W503 +ignore = D105,D211,FI10,FI12,FI13,FI15,FI16,FI17,FI5,H101,H236,H301,H404,H405,H903,N802,N803,N806,D401,D413,D103,D412,P101,W503 exclude = .tox,.git,./*.egg,ez_setup.py,build,externals,user-config.py,./scripts/i18n/*,scripts/userscripts/* min-version = 2.7 max_line_length = 100
pywikibot-commits@lists.wikimedia.org