[tor-commits] [stem/master] Drop StringIO fallback

atagar at torproject.org atagar at torproject.org
Sun Jan 5 21:39:28 UTC 2020


commit 902ce4186be618f6597baf7e57aee2c74852df09
Author: Damian Johnson <atagar at torproject.org>
Date:   Fri Jan 3 16:23:14 2020 -0800

    Drop StringIO fallback
    
    Python 3.x moved StringIO into its io module.
---
 run_tests.py                     |  8 ++------
 stem/descriptor/export.py        |  8 ++------
 stem/interpreter/commands.py     |  8 ++------
 test/integ/connection/connect.py | 14 +++++---------
 test/unit/connection/connect.py  | 12 ++++--------
 test/unit/descriptor/export.py   |  8 ++------
 test/unit/tutorial.py            | 19 +++++++------------
 test/unit/tutorial_examples.py   | 18 +++++++-----------
 8 files changed, 31 insertions(+), 64 deletions(-)

diff --git a/run_tests.py b/run_tests.py
index fc67af3c..d6ced384 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -7,6 +7,7 @@ Runs unit and integration tests. For usage information run this with '--help'.
 """
 
 import errno
+import io
 import importlib
 import logging
 import multiprocessing
@@ -18,11 +19,6 @@ import time
 import traceback
 import unittest
 
-try:
-  from StringIO import StringIO
-except ImportError:
-  from io import StringIO
-
 import stem.prereq
 import stem.util.conf
 import stem.util.log
@@ -427,7 +423,7 @@ def _run_test(args, test_class, output_filters):
     traceback.print_exc(exc)
     return None
 
-  test_results = StringIO()
+  test_results = io.StringIO()
   run_result = stem.util.test_tools.TimedTestRunner(test_results, verbosity = 2).run(suite)
 
   if args.verbose:
diff --git a/stem/descriptor/export.py b/stem/descriptor/export.py
index fea681be..4b909c97 100644
--- a/stem/descriptor/export.py
+++ b/stem/descriptor/export.py
@@ -17,13 +17,9 @@ Toolkit for exporting descriptors to other formats.
    use this modle please `let me know <https://www.atagar.com/contact/>`_.
 """
 
+import io
 import csv
 
-try:
-  from cStringIO import StringIO
-except ImportError:
-  from io import StringIO
-
 import stem.descriptor
 import stem.prereq
 
@@ -50,7 +46,7 @@ def export_csv(descriptors, included_fields = (), excluded_fields = (), header =
   :raises: **ValueError** if descriptors contain more than one descriptor type
   """
 
-  output_buffer = StringIO()
+  output_buffer = io.StringIO()
   export_csv_file(output_buffer, descriptors, included_fields, excluded_fields, header)
   return output_buffer.getvalue()
 
diff --git a/stem/interpreter/commands.py b/stem/interpreter/commands.py
index 0f8f333c..6e61fdda 100644
--- a/stem/interpreter/commands.py
+++ b/stem/interpreter/commands.py
@@ -7,6 +7,7 @@ Handles making requests and formatting the responses.
 
 import code
 import contextlib
+import io
 import socket
 import sys
 
@@ -21,11 +22,6 @@ import stem.util.tor_tools
 from stem.interpreter import STANDARD_OUTPUT, BOLD_OUTPUT, ERROR_OUTPUT, uses_settings, msg
 from stem.util.term import format
 
-try:
-  from cStringIO import StringIO
-except ImportError:
-  from io import StringIO
-
 MAX_EVENTS = 100
 
 
@@ -359,7 +355,7 @@ class ControlInterpreter(code.InteractiveConsole):
         is_tor_command = cmd in config.get('help.usage', {}) and cmd.lower() != 'events'
 
         if self._run_python_commands and not is_tor_command:
-          console_output = StringIO()
+          console_output = io.StringIO()
 
           with redirect(console_output, console_output):
             self.is_multiline_context = code.InteractiveConsole.push(self, command)
diff --git a/test/integ/connection/connect.py b/test/integ/connection/connect.py
index bfeefb19..84b4a8fc 100644
--- a/test/integ/connection/connect.py
+++ b/test/integ/connection/connect.py
@@ -2,6 +2,7 @@
 Integration tests for the connect_* convenience functions.
 """
 
+import io
 import unittest
 
 import stem.connection
@@ -10,15 +11,10 @@ import test.runner
 
 from unittest.mock import patch
 
-try:
-  from StringIO import StringIO
-except ImportError:
-  from io import StringIO
-
 
 class TestConnect(unittest.TestCase):
   @test.require.controller
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   def test_connect(self, stdout_mock):
     """
     Basic sanity checks for the connect function.
@@ -37,7 +33,7 @@ class TestConnect(unittest.TestCase):
     self.assertEqual('', stdout_mock.getvalue())
 
   @test.require.controller
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   def test_connect_port(self, stdout_mock):
     """
     Basic sanity checks for the connect_port function.
@@ -59,7 +55,7 @@ class TestConnect(unittest.TestCase):
       self.assertEqual(control_socket, None)
 
   @test.require.controller
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   def test_connect_socket_file(self, stdout_mock):
     """
     Basic sanity checks for the connect_socket_file function.
@@ -81,7 +77,7 @@ class TestConnect(unittest.TestCase):
       self.assertEqual(control_socket, None)
 
   @test.require.controller
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   def test_connect_to_socks_port(self, stdout_mock):
     """
     Common user gotcha is connecting to the SocksPort or ORPort rather than the
diff --git a/test/unit/connection/connect.py b/test/unit/connection/connect.py
index ec82f19f..175a1ebd 100644
--- a/test/unit/connection/connect.py
+++ b/test/unit/connection/connect.py
@@ -2,6 +2,7 @@
 Unit tests for the stem.connection.connect function.
 """
 
+import io
 import unittest
 
 import stem
@@ -10,14 +11,9 @@ import stem.socket
 
 from unittest.mock import Mock, patch
 
-try:
-  from StringIO import StringIO
-except ImportError:
-  from io import StringIO
-
 
 class TestConnect(unittest.TestCase):
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.util.system.is_running')
   @patch('os.path.exists', Mock(return_value = True))
   @patch('stem.socket.ControlSocketFile', Mock(side_effect = stem.SocketError('failed')))
@@ -30,7 +26,7 @@ class TestConnect(unittest.TestCase):
     is_running_mock.return_value = True
     self._assert_connect_fails_with({}, stdout_mock, "Unable to connect to tor. Maybe it's running without a ControlPort?")
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('os.path.exists')
   @patch('stem.util.system.is_running', Mock(return_value = True))
   @patch('stem.socket.ControlSocketFile', Mock(side_effect = stem.SocketError('failed')))
@@ -118,7 +114,7 @@ class TestConnect(unittest.TestCase):
     authenticate_mock.assert_any_call(control_socket, None, None)
     authenticate_mock.assert_any_call(control_socket, 'my_password', None)
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.connection.authenticate')
   def test_auth_failure(self, authenticate_mock, stdout_mock):
     control_socket = stem.socket.ControlPort(connect = False)
diff --git a/test/unit/descriptor/export.py b/test/unit/descriptor/export.py
index bf7d054a..d27ed241 100644
--- a/test/unit/descriptor/export.py
+++ b/test/unit/descriptor/export.py
@@ -2,13 +2,9 @@
 Unit tests for stem.descriptor.export.
 """
 
+import io
 import unittest
 
-try:
-  from StringIO import StringIO
-except ImportError:
-  from io import StringIO
-
 import stem.prereq
 
 from stem.descriptor.server_descriptor import RelayDescriptor, BridgeDescriptor
@@ -59,7 +55,7 @@ class TestExport(unittest.TestCase):
     desc = RelayDescriptor.create()
     desc_csv = export_csv(desc)
 
-    csv_buffer = StringIO()
+    csv_buffer = io.StringIO()
     export_csv_file(csv_buffer, desc)
 
     self.assertEqual(desc_csv, csv_buffer.getvalue())
diff --git a/test/unit/tutorial.py b/test/unit/tutorial.py
index 58abde9b..91a70a32 100644
--- a/test/unit/tutorial.py
+++ b/test/unit/tutorial.py
@@ -16,11 +16,6 @@ from stem.descriptor.server_descriptor import RelayDescriptor
 from stem.exit_policy import ExitPolicy
 from test.unit import exec_documentation_example
 
-try:
-  from StringIO import StringIO
-except ImportError:
-  from io import StringIO
-
 
 OVER_THE_RIVER_OUTPUT = """\
  * Connecting to tor
@@ -43,7 +38,7 @@ class TestTutorial(unittest.TestCase):
 
     stem.descriptor.remote.SINGLETON_DOWNLOADER = None
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.control.Controller.from_port', spec = Controller)
   def test_the_little_relay_that_could(self, from_port_mock, stdout_mock):
     controller = from_port_mock().__enter__()
@@ -55,7 +50,7 @@ class TestTutorial(unittest.TestCase):
     exec_documentation_example('hello_world.py')
     self.assertEqual('My Tor relay has read 33406 bytes and written 29649.\n', stdout_mock.getvalue())
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('shutil.rmtree')
   @patch('stem.control.Controller.from_port', spec = Controller)
   def test_over_the_river(self, from_port_mock, rmtree_mock, stdout_mock):
@@ -121,7 +116,7 @@ class TestTutorial(unittest.TestCase):
 
     self.assertEqual(OVER_THE_RIVER_OUTPUT, stdout_mock.getvalue())
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.descriptor.remote.DescriptorDownloader')
   def test_mirror_mirror_on_the_wall_1(self, downloader_mock, stdout_mock):
     downloader_mock().get_consensus.return_value = [RouterStatusEntryV2.create({
@@ -131,7 +126,7 @@ class TestTutorial(unittest.TestCase):
     exec_documentation_example('current_descriptors.py')
     self.assertEqual('found relay caerSidi (A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB)\n', stdout_mock.getvalue())
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.control.Controller.from_port', spec = Controller)
   def test_mirror_mirror_on_the_wall_2(self, from_port_mock, stdout_mock):
     controller = from_port_mock().__enter__()
@@ -142,7 +137,7 @@ class TestTutorial(unittest.TestCase):
     exec_documentation_example('descriptor_from_tor_control_socket.py')
     self.assertEqual('found relay caerSidi (A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB)\n', stdout_mock.getvalue())
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('%s.open' % __name__, create = True)
   def test_mirror_mirror_on_the_wall_3(self, open_mock, stdout_mock):
     def tutorial_example():
@@ -160,7 +155,7 @@ class TestTutorial(unittest.TestCase):
     tutorial_example()
     self.assertEqual('found relay caerSidi (A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB)\n', stdout_mock.getvalue())
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.descriptor.collector.get_server_descriptors')
   def test_mirror_mirror_on_the_wall_4(self, get_desc_mock, stdout_mock):
     get_desc_mock.return_value = iter([RelayDescriptor.create({
@@ -171,7 +166,7 @@ class TestTutorial(unittest.TestCase):
     exec_documentation_example('collector_reading.py')
     self.assertEqual('1 relays published an exiting policy today...\n\n  caerSidi (2C3C46625698B6D67DF32BC1918AD3EE1F9906B1)\n', stdout_mock.getvalue())
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.descriptor.remote.DescriptorDownloader')
   @patch('stem.prereq.is_crypto_available', Mock(return_value = False))
   def test_mirror_mirror_on_the_wall_5(self, downloader_mock, stdout_mock):
diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py
index c3359d1e..d96ff71b 100644
--- a/test/unit/tutorial_examples.py
+++ b/test/unit/tutorial_examples.py
@@ -2,15 +2,11 @@
 Tests for the examples given in stem's tutorial.
 """
 
+import io
 import itertools
 import os
 import unittest
 
-try:
-  from StringIO import StringIO
-except ImportError:
-  from io import StringIO
-
 import stem.response
 import stem.descriptor.remote
 import stem.prereq
@@ -125,7 +121,7 @@ def _get_router_status(address = None, port = None, nickname = None, fingerprint
 
 
 class TestTutorialExamples(unittest.TestCase):
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.control.Controller.from_port', spec = Controller)
   def test_list_circuits(self, from_port_mock, stdout_mock):
     path_1 = ('B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C', 'ByTORAndTheSnowDog')
@@ -156,7 +152,7 @@ class TestTutorialExamples(unittest.TestCase):
     exec_documentation_example('list_circuits.py')
     self.assertCountEqual(LIST_CIRCUITS_OUTPUT.splitlines(), stdout_mock.getvalue().splitlines())
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.control.Controller.from_port', spec = Controller)
   def test_exit_used(self, from_port_mock, stdout_mock):
     def tutorial_example(mock_event):
@@ -207,7 +203,7 @@ class TestTutorialExamples(unittest.TestCase):
     tutorial_example(event)
     self.assertCountEqual(EXIT_USED_OUTPUT.splitlines(), stdout_mock.getvalue().splitlines())
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.descriptor.remote.DescriptorDownloader')
   def test_outdated_relays(self, downloader_mock, stdout_mock):
     downloader_mock().get_server_descriptors.return_value = [
@@ -221,7 +217,7 @@ class TestTutorialExamples(unittest.TestCase):
 
     self.assertCountEqual(OUTDATED_RELAYS_OUTPUT.splitlines(), stdout_mock.getvalue().splitlines())
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.descriptor.remote.Query')
   @patch('stem.directory.Authority.from_cache')
   def test_compare_flags(self, authorities_mock, query_mock, stdout_mock):
@@ -262,7 +258,7 @@ class TestTutorialExamples(unittest.TestCase):
 
     self.assertCountEqual(COMPARE_FLAGS_OUTPUT.splitlines(), stdout_mock.getvalue().splitlines())
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.directory.Authority.from_cache')
   @patch('stem.descriptor.remote.DescriptorDownloader.query')
   def test_votes_by_bandwidth_authorities(self, query_mock, authorities_mock, stdout_mock):
@@ -295,7 +291,7 @@ class TestTutorialExamples(unittest.TestCase):
     exec_documentation_example('votes_by_bandwidth_authorities.py')
     self.assertCountEqual(VOTES_BY_BANDWIDTH_AUTHORITIES_OUTPUT.splitlines(), stdout_mock.getvalue().splitlines())
 
-  @patch('sys.stdout', new_callable = StringIO)
+  @patch('sys.stdout', new_callable = io.StringIO)
   @patch('stem.descriptor.parse_file')
   @patch('stem.descriptor.remote.Query')
   def test_persisting_a_consensus(self, query_mock, parse_file_mock, stdout_mock):





More information about the tor-commits mailing list