commit c52042c44b5a157dceb6013743fdea40bbc3f52c Author: Damian Johnson atagar@torproject.org Date: Mon Jun 11 10:01:17 2012 -0700
Adding future 'with' import and checking for it
Stem aims for python 2.5 compatability, but in that version the 'with' keyword wasn't available by default and would only function with a 'future' import. This has the possability of being a continuing pain in our ass so adding this as a check to the check_whitespace module. Admittedly this isn't a whitespace issue, but that module is just so damn conveninent for lintian style issues too...
While doing this I discovered that we aren't running the checker over the stem module (just the tests, it seems), so something else to fix... --- test/check_whitespace.py | 14 ++++++++++++++ test/integ/connection/authentication.py | 2 ++ test/integ/control/base_controller.py | 2 ++ test/integ/control/controller.py | 2 ++ test/integ/descriptor/extrainfo_descriptor.py | 2 ++ test/integ/descriptor/reader.py | 2 ++ test/integ/descriptor/server_descriptor.py | 2 ++ test/integ/response/protocolinfo.py | 2 ++ test/integ/socket/control_message.py | 2 ++ test/integ/socket/control_socket.py | 2 ++ test/runner.py | 2 ++ 11 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/test/check_whitespace.py b/test/check_whitespace.py index db97130..5aed7fa 100644 --- a/test/check_whitespace.py +++ b/test/check_whitespace.py @@ -6,6 +6,12 @@ which are... * tabs are the root of all evil and should be shot on sight * no trailing whitespace unless the line is empty, in which case it should have the same indentation as the surrounding code + +This also checks for 2.5 compatability issues (yea, they're not whitespace but +it's so much easier to do here...): + +* checks that anything using the 'with' keyword has... + from __future__ import with_statement """
import re @@ -32,10 +38,18 @@ def get_issues(base_path = DEFAULT_TARGET): for file_path in _get_python_files(base_path): with open(file_path) as f: file_contents = f.read() lines, file_issues, prev_indent = file_contents.splitlines(), [], 0 + has_with_import, given_with_warning = False, False
for i in xrange(len(lines)): whitespace, content = re.match("^(\s*)(.*)$", lines[i]).groups()
+ if content == "from __future__ import with_statement": + has_with_import = True + elif content.startswith("with ") and content.endswith(":") \ + and not has_with_import and not given_with_warning: + file_issues.append((i + 1, "missing 'with' import (from __future__ import with_statement)")) + given_with_warning = True + if "\t" in whitespace: file_issues.append((i + 1, "indentation has a tab")) elif content != content.rstrip(): diff --git a/test/integ/connection/authentication.py b/test/integ/connection/authentication.py index 4f1d504..31407a3 100644 --- a/test/integ/connection/authentication.py +++ b/test/integ/connection/authentication.py @@ -3,6 +3,8 @@ Integration tests for authenticating to the control socket via stem.connection.authenticate* functions. """
+from __future__ import with_statement + import os import unittest
diff --git a/test/integ/control/base_controller.py b/test/integ/control/base_controller.py index 32239d2..ab5ded5 100644 --- a/test/integ/control/base_controller.py +++ b/test/integ/control/base_controller.py @@ -2,6 +2,8 @@ Integration tests for the stem.control.BaseController class. """
+from __future__ import with_statement + import re import time import unittest diff --git a/test/integ/control/controller.py b/test/integ/control/controller.py index 1b743e1..b3eb523 100644 --- a/test/integ/control/controller.py +++ b/test/integ/control/controller.py @@ -2,6 +2,8 @@ Integration tests for the stem.control.Controller class. """
+from __future__ import with_statement + import unittest
import stem.control diff --git a/test/integ/descriptor/extrainfo_descriptor.py b/test/integ/descriptor/extrainfo_descriptor.py index d7244a9..45d1a2b 100644 --- a/test/integ/descriptor/extrainfo_descriptor.py +++ b/test/integ/descriptor/extrainfo_descriptor.py @@ -2,6 +2,8 @@ Integration tests for stem.descriptor.extrainfo_descriptor. """
+from __future__ import with_statement + import os import datetime import unittest diff --git a/test/integ/descriptor/reader.py b/test/integ/descriptor/reader.py index 0e6c867..bebb917 100644 --- a/test/integ/descriptor/reader.py +++ b/test/integ/descriptor/reader.py @@ -2,6 +2,8 @@ Integration tests for stem.descriptor.reader. """
+from __future__ import with_statement + import os import sys import time diff --git a/test/integ/descriptor/server_descriptor.py b/test/integ/descriptor/server_descriptor.py index 449fb2f..0af3cdf 100644 --- a/test/integ/descriptor/server_descriptor.py +++ b/test/integ/descriptor/server_descriptor.py @@ -2,6 +2,8 @@ Integration tests for stem.descriptor.server_descriptor. """
+from __future__ import with_statement + import os import datetime import unittest diff --git a/test/integ/response/protocolinfo.py b/test/integ/response/protocolinfo.py index 6b7e397..a80f406 100644 --- a/test/integ/response/protocolinfo.py +++ b/test/integ/response/protocolinfo.py @@ -3,6 +3,8 @@ Integration tests for the stem.response.protocolinfo.ProtocolInfoResponse class and related functions. """
+from __future__ import with_statement + import unittest
import test.runner diff --git a/test/integ/socket/control_message.py b/test/integ/socket/control_message.py index c148605..1578917 100644 --- a/test/integ/socket/control_message.py +++ b/test/integ/socket/control_message.py @@ -2,6 +2,8 @@ Integration tests for the stem.response.ControlMessage class. """
+from __future__ import with_statement + import re import unittest
diff --git a/test/integ/socket/control_socket.py b/test/integ/socket/control_socket.py index b00e381..1f06027 100644 --- a/test/integ/socket/control_socket.py +++ b/test/integ/socket/control_socket.py @@ -8,6 +8,8 @@ those focus on parsing and correctness of the content these are more concerned with the behavior of the socket itself. """
+from __future__ import with_statement + import unittest
import stem.connection diff --git a/test/runner.py b/test/runner.py index 8c01c3e..7d053cb 100644 --- a/test/runner.py +++ b/test/runner.py @@ -33,6 +33,8 @@ about the tor test instance they're running against. +- get_tor_command - provides the command used to start tor """
+from __future__ import with_statement + import os import sys import time
tor-commits@lists.torproject.org