commit e9060e62fa0317f229ec3bfdd3d821c7eb256a84
Author: Damian Johnson <atagar(a)torproject.org>
Date: Thu Dec 31 08:45:15 2015 -0800
Move imports to the top of files
Stylistic complaint E402 in the new version of pep8...
line 870 - E402 module level import not at top of file | import stem.descriptor.extrainfo_descriptor
Usually this is simply because I put __all__ blocks above them which is trivial
to change. In a few cases though I reorder imports for a good reason. As such,
adding the ability to ignore more targeted pep8 issues.
---
stem/__init__.py | 22 +++++++++++-----------
stem/descriptor/__init__.py | 28 ++++++++++++++--------------
stem/interpreter/__init__.py | 14 +++++++-------
stem/response/__init__.py | 10 +++++-----
stem/util/__init__.py | 4 ++--
stem/util/test_tools.py | 28 ++++++++++++++++++++++++++--
test/settings.cfg | 8 ++++++++
test/unit/__init__.py | 7 +++----
test/unit/descriptor/__init__.py | 4 ++--
test/unit/util/__init__.py | 12 ++++++------
10 files changed, 84 insertions(+), 53 deletions(-)
diff --git a/stem/__init__.py b/stem/__init__.py
index 273578a..e951ec2 100644
--- a/stem/__init__.py
+++ b/stem/__init__.py
@@ -464,6 +464,17 @@ Library for working with the tor process.
================= ===========
"""
+import stem.prereq
+
+if stem.prereq.is_python_3():
+ str_type = str
+ int_type = int
+else:
+ str_type = unicode
+ int_type = long
+
+import stem.util.enum
+
__version__ = '1.4.1-dev'
__author__ = 'Damian Johnson'
__contact__ = 'atagar(a)torproject.org'
@@ -517,17 +528,6 @@ __all__ = [
'TimeoutSetType',
]
-import stem.prereq
-
-if stem.prereq.is_python_3():
- str_type = str
- int_type = int
-else:
- str_type = unicode
- int_type = long
-
-import stem.util.enum
-
# Constant to indicate an undefined argument default. Usually we'd use None for
# this, but users will commonly provide None as the argument so need something
# else fairly unique...
diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py
index af96bde..e46f30d 100644
--- a/stem/descriptor/__init__.py
+++ b/stem/descriptor/__init__.py
@@ -36,20 +36,6 @@ Package for parsing and processing descriptor data.
=================== ===========
"""
-__all__ = [
- 'export',
- 'reader',
- 'remote',
- 'extrainfo_descriptor',
- 'server_descriptor',
- 'microdescriptor',
- 'networkstatus',
- 'router_status_entry',
- 'tordnsel',
- 'parse_file',
- 'Descriptor',
-]
-
import base64
import codecs
import copy
@@ -71,6 +57,20 @@ try:
except ImportError:
from stem.util.ordereddict import OrderedDict
+__all__ = [
+ 'export',
+ 'reader',
+ 'remote',
+ 'extrainfo_descriptor',
+ 'server_descriptor',
+ 'microdescriptor',
+ 'networkstatus',
+ 'router_status_entry',
+ 'tordnsel',
+ 'parse_file',
+ 'Descriptor',
+]
+
KEYWORD_CHAR = 'a-zA-Z0-9-'
WHITESPACE = ' \t'
KEYWORD_LINE = re.compile('^([%s]+)(?:[%s]+(.*))?$' % (KEYWORD_CHAR, WHITESPACE))
diff --git a/stem/interpreter/__init__.py b/stem/interpreter/__init__.py
index f8dce7e..195e32a 100644
--- a/stem/interpreter/__init__.py
+++ b/stem/interpreter/__init__.py
@@ -6,13 +6,6 @@ Interactive interpreter for interacting with Tor directly. This adds usability
features such as tab completion, history, and IRC-style functions (like /help).
"""
-__all__ = [
- 'arguments',
- 'autocomplete',
- 'commands',
- 'help',
-]
-
import os
import sys
@@ -26,6 +19,13 @@ import stem.util.term
from stem.util.term import Attr, Color, format
+__all__ = [
+ 'arguments',
+ 'autocomplete',
+ 'commands',
+ 'help',
+]
+
PROMPT = format('>>> ', Color.GREEN, Attr.BOLD, Attr.READLINE_ESCAPE)
STANDARD_OUTPUT = (Color.BLUE, )
diff --git a/stem/response/__init__.py b/stem/response/__init__.py
index 0612007..1c391c0 100644
--- a/stem/response/__init__.py
+++ b/stem/response/__init__.py
@@ -30,6 +30,11 @@ Parses replies from the control socket.
+- pop_mapping - removes and returns the next entry as a KEY=VALUE mapping
"""
+import re
+import threading
+
+import stem.socket
+
__all__ = [
'add_onion',
'events',
@@ -43,16 +48,11 @@ __all__ = [
'SingleLineResponse',
]
-import re
-import threading
-
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
-import stem.socket
-
KEY_ARG = re.compile('^(\S+)=')
# Escape sequences from the 'esc_for_log' function of tor's 'common/util.c'.
diff --git a/stem/util/__init__.py b/stem/util/__init__.py
index ecdf288..2ee9b9b 100644
--- a/stem/util/__init__.py
+++ b/stem/util/__init__.py
@@ -5,6 +5,8 @@
Utility functions used by the stem library.
"""
+import datetime
+
__all__ = [
'conf',
'connection',
@@ -20,8 +22,6 @@ __all__ = [
'datetime_to_unix',
]
-import datetime
-
def datetime_to_unix(timestamp):
"""
diff --git a/stem/util/test_tools.py b/stem/util/test_tools.py
index bc54f94..533f8d3 100644
--- a/stem/util/test_tools.py
+++ b/stem/util/test_tools.py
@@ -139,6 +139,8 @@ def stylistic_issues(paths, check_newlines = False, check_exception_keyword = Fa
pep8.ignore E121
pep8.ignore E501
+ pep8.ignore run_tests.py => E402: import stem.util.enum
+
... you can then run tests with...
::
@@ -177,6 +179,26 @@ def stylistic_issues(paths, check_newlines = False, check_exception_keyword = Fa
issues = {}
+ ignore_rules = []
+ ignore_for_file = []
+
+ for rule in CONFIG['pep8.ignore']:
+ if '=>' in rule:
+ path, rule_entry = rule.split('=>', 1)
+
+ if ':' in rule_entry:
+ rule, code = rule_entry.split(':', 1)
+ ignore_for_file.append((path.strip(), rule.strip(), code.strip()))
+ else:
+ ignore_rules.append(rule)
+
+ def is_ignored(path, rule, code):
+ for ignored_path, ignored_rule, ignored_code in ignore_for_file:
+ if path.endswith(ignored_path) and ignored_rule == rule and ignored_code == code.strip():
+ return True
+
+ return False
+
if is_pep8_available():
import pep8
@@ -189,9 +211,11 @@ def stylistic_issues(paths, check_newlines = False, check_exception_keyword = Fa
if code:
line = linecache.getline(self.filename, line_number)
- issues.setdefault(self.filename, []).append(Issue(line_number, text, line))
- style_checker = pep8.StyleGuide(ignore = CONFIG['pep8.ignore'], reporter = StyleReport)
+ 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.check_files(list(_python_files(paths)))
if check_newlines or check_exception_keyword:
diff --git a/test/settings.cfg b/test/settings.cfg
index 7443544..fd199e1 100644
--- a/test/settings.cfg
+++ b/test/settings.cfg
@@ -128,6 +128,14 @@ pep8.ignore E251
pep8.ignore E127
pep8.ignore E131
+pep8.ignore stem/__init__.py => E402: import stem.util.enum
+pep8.ignore stem/descriptor/__init__.py => E402: import stem.descriptor.server_descriptor
+pep8.ignore stem/descriptor/__init__.py => E402: import stem.descriptor.extrainfo_descriptor
+pep8.ignore stem/descriptor/__init__.py => E402: import stem.descriptor.networkstatus
+pep8.ignore stem/descriptor/__init__.py => E402: import stem.descriptor.microdescriptor
+pep8.ignore stem/descriptor/__init__.py => E402: import stem.descriptor.tordnsel
+pep8.ignore stem/descriptor/__init__.py => E402: import stem.descriptor.hidden_service_descriptor
+
# False positives from pyflakes. These are mappings between the path and the
# issue.
diff --git a/test/unit/__init__.py b/test/unit/__init__.py
index d76ecfe..94cd059 100644
--- a/test/unit/__init__.py
+++ b/test/unit/__init__.py
@@ -2,6 +2,9 @@
Unit tests for the stem library.
"""
+import os
+import test.util
+
__all__ = [
'connection',
'control',
@@ -13,10 +16,6 @@ __all__ = [
]
-import os
-import test.util
-
-
def exec_documentation_example(filename):
path = os.path.join(test.util.STEM_BASE, 'docs', '_static', 'example', filename)
diff --git a/test/unit/descriptor/__init__.py b/test/unit/descriptor/__init__.py
index b182f42..b7696ac 100644
--- a/test/unit/descriptor/__init__.py
+++ b/test/unit/descriptor/__init__.py
@@ -2,6 +2,8 @@
Unit tests for stem.descriptor.
"""
+import os
+
__all__ = [
'export',
'extrainfo_descriptor',
@@ -12,8 +14,6 @@ __all__ = [
'server_descriptor',
]
-import os
-
DESCRIPTOR_TEST_DATA = os.path.join(os.path.dirname(__file__), 'data')
diff --git a/test/unit/util/__init__.py b/test/unit/util/__init__.py
index e755625..866ec4b 100644
--- a/test/unit/util/__init__.py
+++ b/test/unit/util/__init__.py
@@ -2,6 +2,12 @@
Unit tests for stem.util.* contents.
"""
+import datetime
+import time
+import unittest
+
+from stem.util import datetime_to_unix
+
__all__ = [
'conf',
'connection',
@@ -12,12 +18,6 @@ __all__ = [
'tor_tools',
]
-import datetime
-import time
-import unittest
-
-from stem.util import datetime_to_unix
-
class TestBaseUtil(unittest.TestCase):
def test_datetime_to_unix(self):