jenkins-bot has submitted this change and it was merged.
Change subject: Tox pyflakes task
......................................................................
Tox pyflakes task
Replace flake8 disable=xxx with alternative workarounds for pyflakes.
For Tox/Jenkins, use pyflakes directly on various Python
implementations/versions, adding checking PyPy by Jenkins,
and an unused testenv for developer checking of Python 2.6.
The tox flake8 task now only runs on Python 2.7, as typically
flake8 plugins & errors are not version specific.
Bug: T101592
Change-Id: I076a5300ae6ff1c30365be106a8ceca2d48de7e4
---
M pwb.py
M pywikibot/bot.py
M pywikibot/page.py
M pywikibot/tools/__init__.py
M pywikibot/userinterfaces/terminal_interface_base.py
M scripts/maintenance/cache.py
M setup.py
M tox.ini
8 files changed, 109 insertions(+), 33 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pwb.py b/pwb.py
index 7290738..88e40ee 100755
--- a/pwb.py
+++ b/pwb.py
@@ -72,7 +72,7 @@
"""
global pwb
try:
- import pywikibot # flake8: disable=F811
+ import pywikibot
pwb = pywikibot
except RuntimeError:
remove_modules()
@@ -184,7 +184,8 @@
if sys.platform == 'win32' and sys.version_info[0] < 3:
_pwb_dir = str(_pwb_dir)
os.environ[str('PYWIKIBOT2_DIR_PWB')] = _pwb_dir
- import pywikibot # flake8: disable=F401
+ import pywikibot
+ pwb = pywikibot
except RuntimeError as err:
# user-config.py to be created
print("NOTE: 'user-config.py' was not found!")
diff --git a/pywikibot/bot.py b/pywikibot/bot.py
index 2788b86..7dbb8ef 100644
--- a/pywikibot/bot.py
+++ b/pywikibot/bot.py
@@ -84,12 +84,12 @@
from pywikibot import config
from pywikibot import daemonize
from pywikibot import version
-from pywikibot.bot_choice import ( # flake8: disable=F401 (unused imports)
+from pywikibot.bot_choice import (
Option, StandardOption, NestedOption, IntegerOption, ContextOption,
ListOption, OutputProxyOption, HighlightContextOption,
ChoiceException, QuitKeyboardInterrupt,
)
-from pywikibot.logging import ( # flake8: disable=F401
+from pywikibot.logging import (
CRITICAL, ERROR, INFO, WARNING,
)
from pywikibot.logging import DEBUG, INPUT, STDOUT, VERBOSE
@@ -97,7 +97,7 @@
add_init_routine,
debug, error, exception, log, output, stdout, warning,
)
-from pywikibot.logging import critical # flake8: disable=F401
+from pywikibot.logging import critical
from pywikibot.tools import deprecated, deprecated_args, PY2, PYTHON_VERSION
from pywikibot.tools._logging import (
LoggingFormatter as _LoggingFormatter,
@@ -105,6 +105,27 @@
)
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',
+ 'BaseBot', 'Bot', 'SingleSiteBot',
'MultipleSitesBot',
+ 'CurrentPageBot', 'AutomaticTWSummaryBot',
+ 'ExistingPageBot', 'FollowRedirectPageBot',
'CreatingPageBot',
+ 'RedirectPageBot', 'NoRedirectPageBot',
+ 'WikidataBot',
+)
+
if not PY2:
unicode = str
diff --git a/pywikibot/page.py b/pywikibot/page.py
index c3ee4de..901d3dd 100644
--- a/pywikibot/page.py
+++ b/pywikibot/page.py
@@ -34,13 +34,19 @@
from collections import defaultdict, namedtuple
from warnings import warn
-if sys.version_info[0] > 2:
+from pywikibot.tools import PY2
+
+if not PY2:
unicode = basestring = str
long = int
from html import entities as htmlentitydefs
from urllib.parse import quote_from_bytes, unquote_to_bytes
else:
- chr = unichr # flake8 F821 (undefined name) disabled by tox.ini
+ if __debug__ and not PY2:
+ unichr = NotImplemented # pyflakes workaround
+
+ chr = unichr
+
import htmlentitydefs
from urllib import quote as quote_from_bytes, unquote as unquote_to_bytes
@@ -60,16 +66,36 @@
from pywikibot.family import Family
from pywikibot.site import Namespace
from pywikibot.tools import (
- PYTHON_VERSION, PY2,
+ PYTHON_VERSION,
MediaWikiVersion, UnicodeMixin, ComparableMixin, DotReadableDict,
deprecated, deprecate_arg, deprecated_args, issue_deprecation_warning,
ModuleDeprecationWrapper as _ModuleDeprecationWrapper,
first_upper, remove_last_args, _NotImplementedWarning,
OrderedDict, Counter,
)
-from pywikibot.tools.ip import ip_regexp # flake8: disable=F401 (unused import)
+from pywikibot.tools.ip import ip_regexp
from pywikibot.tools.ip import is_IP
+__all__ = (
+ 'BasePage',
+ 'Page',
+ 'FilePage',
+ 'Category',
+ 'User',
+ 'WikibasePage',
+ 'ItemPage',
+ 'Property',
+ 'PropertyPage',
+ 'Claim',
+ 'Revision',
+ 'FileInfo',
+ 'Link',
+ 'html2unicode',
+ 'UnicodeToAsciiHtml',
+ 'unicode2html',
+ 'url2unicode',
+ 'ip_regexp', # unused & deprecated
+)
logger = logging.getLogger("pywiki.wiki.page")
diff --git a/pywikibot/tools/__init__.py b/pywikibot/tools/__init__.py
index 7a629e1..ff94c70 100644
--- a/pywikibot/tools/__init__.py
+++ b/pywikibot/tools/__init__.py
@@ -147,9 +147,9 @@
else:
- from collections import Counter # flake8: disable=F401 (unused import)
- from collections import OrderedDict
- from itertools import count # flake8: disable=F401 (unused import)
+ Counter = collections.Counter
+ OrderedDict = collections.OrderedDict
+ count = itertools.count
def empty_iterator():
diff --git a/pywikibot/userinterfaces/terminal_interface_base.py
b/pywikibot/userinterfaces/terminal_interface_base.py
index dbae726..3cda2cf 100755
--- a/pywikibot/userinterfaces/terminal_interface_base.py
+++ b/pywikibot/userinterfaces/terminal_interface_base.py
@@ -53,6 +53,9 @@
colorTagR = re.compile('\03{(?P<name>%s|previous)}' %
'|'.join(colors))
+if __debug__ and not PY2:
+ raw_input = NotImplemented # pyflakes workaround
+
class UI(object):
diff --git a/scripts/maintenance/cache.py b/scripts/maintenance/cache.py
index 7fe3d12..299497d 100755
--- a/scripts/maintenance/cache.py
+++ b/scripts/maintenance/cache.py
@@ -77,8 +77,17 @@
from pywikibot.data import api
# The follow attributes are used by eval()
-from pywikibot.page import User # flake8: disable=F401 (unused import)
-from pywikibot.site import APISite, DataSite, LoginStatus # flake8: disable=F401
+from pywikibot.page import User
+from pywikibot.site import APISite, DataSite, LoginStatus
+
+__all__ = (
+ 'User', 'APISite', 'DataSite', 'LoginStatus',
+ 'ParseError', 'CacheEntry', 'process_entries',
'main',
+ 'has_password', 'is_logout', 'empty_response',
'not_accessed',
+ 'incorrect_hash',
+ 'older_than', 'newer_than', 'older_than_one_day',
'recent',
+ 'uniquedesc', 'parameters',
+)
class ParseError(Exception):
diff --git a/setup.py b/setup.py
index fa1da3a..c880ec4 100644
--- a/setup.py
+++ b/setup.py
@@ -14,9 +14,12 @@
try:
# Work around a traceback on Python < 2.7.4 and < 3.3.1
#
http://bugs.python.org/issue15881#msg170215
- import multiprocessing # flake8: disable=F401 (unused import)
+ import multiprocessing
except ImportError:
pass
+
+# pyflakes workaround
+__unused__ = (multiprocessing, )
PYTHON_VERSION = sys.version_info[:3]
PY2 = (PYTHON_VERSION[0] == 2)
@@ -108,7 +111,8 @@
if PYTHON_VERSION < (2, 7, 3):
# work around distutils hardcoded unittest dependency
# work around T106512
- import unittest # flake8: disable=F401 (unused import)
+ import unittest
+ __unused__ += (unittest, )
if 'test' in sys.argv:
import unittest2
sys.modules['unittest'] = unittest2
@@ -142,7 +146,8 @@
script_deps['data_ingestion.py'] = extra_deps['csv']
try:
- import bz2 # flake8: disable=F401 (unused import)
+ import bz2
+ __unused__ += (bz2, )
except ImportError:
# Use bz2file if the python is not compiled with bz2 support.
dependencies.append('bz2file')
diff --git a/tox.ini b/tox.ini
index ea79390..e44df2b 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,12 +1,15 @@
[tox]
-minversion = 1.6
+# minversion = 1.7.2 needed for skip_missing_interpreters
+minversion = 1.7.2
skipsdist = True
-envlist = flake8,flake8-py3,doctest-{py27,py34},py26,py27,py34
+skip_missing_interpreters = True
+envlist = flake8,pyflakes-{py26,py3,pypy},doctest-{py27,py34},py26,py27,py34
[tox:jenkins]
# Override default for WM Jenkins
# Others are run in their own individual jobs on WM Jenkins
-envlist = flake8,flake8-py3
+# Wikimedia Jenkins does not have Python 2.6
+envlist = flake8,pyflakes-{py3,pypy}
[params]
doctest_skip = --ignore-files=(gui\.py|botirc\.py|rcstream\.py)
@@ -21,6 +24,27 @@
[testenv:py26]
deps = unittest2
+
+[testenv:pyflakes-py26]
+commands = ffind --ignore-vcs . '(?<!user-config).py$' --module=pyflakes
+basepython = python2.6
+deps =
+ pyflakes
+ ffind>=1.0.2
+
+[testenv:pyflakes-py3]
+commands = ffind --ignore-vcs . '(?<!user-config).py$' --module=pyflakes
+basepython = python3
+deps =
+ pyflakes
+ ffind>=1.0.2
+
+[testenv:pyflakes-pypy]
+commands = ffind --ignore-vcs . '(?<!user-config).py$' --module=pyflakes
+basepython = pypy
+deps =
+ pyflakes
+ ffind>=1.0.2
[testenv:flake8]
commands =
@@ -39,16 +63,6 @@
flake8-tuple>=0.2.8
flake8-print>=2.0.1
flake8-mock
-
-[testenv:flake8-py3]
-commands =
- flake8 --version
- flake8 --doctests {posargs}
-basepython = python3
-deps = flake8
- pyflakes >= 1.1
- flake8-docstrings>=0.2.6
- flake8-putty>=0.3.2
[testenv:nose]
commands =
@@ -135,9 +149,6 @@
scripts/makecat.py : +D103
scripts/interwiki.py,/""/ : +P102
pywikibot/__init__.py,/link_regex/ : +P103
- # undefined names on Python 3:
- pywikibot/page.py , /chr = unichr/ , python_version >= '3' : +F821
- pywikibot/userinterfaces/terminal_interface_base.py , /raw_input\(\)/ ,
python_version >= '3' : +F821
# invalidly detected as {} format string:
tests/textlib_tests.py,/self.assert.*{{/ : +P103
# __dict__ used in a discouraged manner
--
To view, visit
https://gerrit.wikimedia.org/r/260909
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I076a5300ae6ff1c30365be106a8ceca2d48de7e4
Gerrit-PatchSet: 24
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Hashar <hashar(a)free.fr>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>