[tor-commits] [stem/master] Switch to 'import pycodestyle' and add fallback mechanism
atagar at torproject.org
atagar at torproject.org
Sat Oct 29 22:28:02 UTC 2016
commit 5d7f24c5dd6b34dfaccd534707d018e2889bb31e
Author: Neel Chauhan <neel at neelc.org>
Date: Wed Oct 26 20:35:15 2016 -0400
Switch to 'import pycodestyle' and add fallback mechanism
---
stem/util/test_tools.py | 74 ++++++++++++++++++++++++++++++-------------------
1 file changed, 45 insertions(+), 29 deletions(-)
diff --git a/stem/util/test_tools.py b/stem/util/test_tools.py
index 9a9f7f6..450e18a 100644
--- a/stem/util/test_tools.py
+++ b/stem/util/test_tools.py
@@ -11,9 +11,9 @@ Helper functions for testing.
clean_orphaned_pyc - delete *.pyc files without corresponding *.py
is_pyflakes_available - checks if pyflakes is available
- is_pep8_available - checks if pep8 is available
+ is_pycodestyle_available - checks if pycodestyle is available
- stylistic_issues - checks for PEP8 and other stylistic issues
+ stylistic_issues - checks for pycodestyle and other stylistic issues
pyflakes_issues - static checks for problems via pyflakes
"""
@@ -26,7 +26,7 @@ import stem.util.conf
import stem.util.system
CONFIG = stem.util.conf.config_dict('test', {
- 'pep8.ignore': [],
+ 'pycodestyle.ignore': [],
'pyflakes.ignore': [],
'exclude_paths': [],
})
@@ -34,7 +34,7 @@ CONFIG = stem.util.conf.config_dict('test', {
class Issue(collections.namedtuple('Issue', ['line_number', 'message', 'line'])):
"""
- Issue encountered by pyflakes or pep8.
+ Issue encountered by pyflakes or pycodestyle.
:var int line_number: line number the issue occured on
:var str message: description of the issue
@@ -86,6 +86,18 @@ def clean_orphaned_pyc(paths):
return orphaned_pyc
+def module_exists(module_name):
+ """
+ Checks if a module exists
+
+ :returns: **True** if module exists and **False** otherwise
+ """
+ try:
+ mod = __import__(module_name)
+ except ImportError:
+ return False
+ else:
+ return True
def is_pyflakes_available():
"""
@@ -102,44 +114,45 @@ def is_pyflakes_available():
return False
-def is_pep8_available():
+def is_pycodestyle_available():
"""
- Checks if pep8 is availalbe.
+ Checks if pycodestyle is availalbe.
- :returns: **True** if we can use pep8 and **False** otherwise
+ :returns: **True** if we can use pycodestyle and **False** otherwise
"""
- try:
- import pep8
-
- if not hasattr(pep8, 'BaseReport'):
- raise ImportError()
-
- return True
- except ImportError:
+ if module_exists('pycodestyle'):
+ import pycodestyle
+ elif module_exists('pep8'):
+ import pep8 as pycodestyle
+ else:
return False
+ if not hasattr(pycodestyle, 'BaseReport'):
+ return False
+ else:
+ return True
def stylistic_issues(paths, check_newlines = False, check_exception_keyword = False, prefer_single_quotes = False):
"""
- Checks for stylistic issues that are an issue according to the parts of PEP8
- we conform to. You can suppress PEP8 issues by making a 'test' configuration
- that sets 'pep8.ignore'.
+ Checks for stylistic issues that are an issue according to the parts of
+ pycodestyle we conform to. You can suppress pycodestyle issues by making a
+ 'test' configuration that sets 'pycodestyle.ignore'.
For example, with a 'test/settings.cfg' of...
::
- # PEP8 compliance issues that we're ignoreing...
+ # pycodestyle compliance issues that we're ignoreing...
#
# * E111 and E121 four space indentations
# * E501 line is over 79 characters
- pep8.ignore E111
- pep8.ignore E121
- pep8.ignore E501
+ pycodestyle.ignore E111
+ pycodestyle.ignore E121
+ pycodestyle.ignore E501
- pep8.ignore run_tests.py => E402: import stem.util.enum
+ pycodestyle.ignore run_tests.py => E402: import stem.util.enum
... you can then run tests with...
@@ -182,7 +195,7 @@ def stylistic_issues(paths, check_newlines = False, check_exception_keyword = Fa
ignore_rules = []
ignore_for_file = []
- for rule in CONFIG['pep8.ignore']:
+ for rule in CONFIG['pycodestyle.ignore']:
if '=>' in rule:
path, rule_entry = rule.split('=>', 1)
@@ -199,10 +212,13 @@ def stylistic_issues(paths, check_newlines = False, check_exception_keyword = Fa
return False
- if is_pep8_available():
- import pep8
+ if is_pycodestyle_available():
+ if module_exists('pycodestyle'):
+ import pycodestyle
+ elif module_exists('pep8'):
+ import pep8 as pycodestyle
- class StyleReport(pep8.BaseReport):
+ class StyleReport(pycodestyle.BaseReport):
def __init__(self, options):
super(StyleReport, self).__init__(options)
@@ -215,7 +231,7 @@ def stylistic_issues(paths, check_newlines = False, check_exception_keyword = Fa
if not is_ignored(self.filename, code, line):
issues.setdefault(self.filename, []).append(Issue(line_number, text, line))
- style_checker = pep8.StyleGuide(ignore = ignore_rules, reporter = StyleReport)
+ style_checker = pycodestyle.StyleGuide(ignore = ignore_rules, reporter = StyleReport)
style_checker.check_files(list(_python_files(paths)))
if check_newlines or check_exception_keyword:
@@ -269,7 +285,7 @@ def pyflakes_issues(paths):
::
pyflakes.ignore stem/util/test_tools.py => 'pyflakes' imported but unused
- pyflakes.ignore stem/util/test_tools.py => 'pep8' imported but unused
+ pyflakes.ignore stem/util/test_tools.py => 'pycodestyle' imported but unused
If a 'exclude_paths' was set in our test config then we exclude any absolute
paths matching those regexes.
More information about the tor-commits
mailing list