summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-04-16 02:58:47 +0000
committerGerrit Code Review <review@openstack.org>2014-04-16 02:58:47 +0000
commitaaa563c74916bc40e2f8d5b560030b4e4ce9c08d (patch)
tree0007ef9eefe63398940866bf1d47c0aee85a5ad2
parentc810772623c9ffb17533a9327188793847975304 (diff)
parentea498fb052e6101e0b986fb8e4927a9fda77b04f (diff)
downloadpython-swiftclient-aaa563c74916bc40e2f8d5b560030b4e4ce9c08d.tar.gz
Merge "Fix test_multithreading on Python 3"
-rw-r--r--swiftclient/multithreading.py11
-rw-r--r--tests/test_multithreading.py12
2 files changed, 16 insertions, 7 deletions
diff --git a/swiftclient/multithreading.py b/swiftclient/multithreading.py
index 935f61f..2f498c9 100644
--- a/swiftclient/multithreading.py
+++ b/swiftclient/multithreading.py
@@ -16,6 +16,7 @@
from __future__ import print_function
from itertools import chain
+import six
import sys
from time import sleep
from six.moves.queue import Queue
@@ -184,7 +185,7 @@ class MultiThreadingManager(object):
(defaults to ``sys.stdout``) and the :meth:`error` method will print to the
supplied ``error_stream`` (defaults to ``sys.stderr``). Both of these
printing methods will format the given string with any supplied ``*args``
- (a la printf) and encode the result to utf8 if necessary.
+ (a la printf). On Python 2, Unicode messages are encoded to utf8.
The attribute :attr:`self.error_count` is incremented once per error
message printed, so an application can tell if any worker threads
@@ -196,9 +197,11 @@ class MultiThreadingManager(object):
def __init__(self, print_stream=sys.stdout, error_stream=sys.stderr):
"""
:param print_stream: The stream to which :meth:`print_msg` sends
- formatted messages, encoded to utf8 if necessary.
+ formatted messages
:param error_stream: The stream to which :meth:`error` sends formatted
- messages, encoded to utf8 if necessary.
+ messages
+
+ On Python 2, Unicode messages are encoded to utf8.
"""
self.print_stream = print_stream
self.printer = QueueFunctionManager(self._print, 1, self)
@@ -259,7 +262,7 @@ class MultiThreadingManager(object):
def _print(self, item, stream=None):
if stream is None:
stream = self.print_stream
- if isinstance(item, unicode):
+ if six.PY2 and isinstance(item, unicode):
item = item.encode('utf8')
print(item, file=stream)
diff --git a/tests/test_multithreading.py b/tests/test_multithreading.py
index 81b0766..875e43a 100644
--- a/tests/test_multithreading.py
+++ b/tests/test_multithreading.py
@@ -320,16 +320,22 @@ class TestMultiThreadingManager(ThreadTestCase):
self.assertEqual(self.starting_thread_count, threading.active_count())
out_stream.seek(0)
+ if six.PY3:
+ over_the = "over the '\u062a\u062a'\n"
+ else:
+ over_the = "over the u'\\u062a\\u062a'\n"
self.assertEqual([
'one-argument\n',
'one fish, 88 fish\n',
- 'some\n', 'where\n', "over the u'\\u062a\\u062a'\n",
+ 'some\n', 'where\n', over_the,
], list(out_stream.readlines()))
err_stream.seek(0)
+ first_item = u'I have 99 problems, but a \u062A\u062A is not one\n'
+ if six.PY2:
+ first_item = first_item.encode('utf8')
self.assertEqual([
- u'I have 99 problems, but a \u062A\u062A is not one\n'.encode(
- 'utf8'),
+ first_item,
'one-error-argument\n',
'Sometimes\n', '3.1% just\n', 'does not\n', 'work!\n',
], list(err_stream.readlines()))