From 34bcb6d15060140d7c15425d848dacdfc5b647bb Mon Sep 17 00:00:00 2001 From: Steven Hardy Date: Thu, 16 Oct 2014 18:40:19 +0100 Subject: [PATCH] Fix string concatenation errors Some error paths concatenate the output of "type" with a string, which gives TypeError: cannot concatenate 'str' and 'type' objects, rather than describing the actual error. Closes #149 GH Closes #150 GH Conflicts: eventlet/hubs/twistedr.py --- eventlet/green/select.py | 4 ++-- tests/greenio_test.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/eventlet/green/select.py b/eventlet/green/select.py index f1bf381..53fb359 100644 --- a/eventlet/green/select.py +++ b/eventlet/green/select.py @@ -17,12 +17,12 @@ def get_fileno(obj): f = obj.fileno except AttributeError: if not isinstance(obj, six.integer_types): - raise TypeError("Expected int or long, got " + type(obj)) + raise TypeError("Expected int or long, got %s" % type(obj)) return obj else: rv = f() if not isinstance(rv, six.integer_types): - raise TypeError("Expected int or long, got " + type(rv)) + raise TypeError("Expected int or long, got %s" % type(rv)) return rv diff --git a/tests/greenio_test.py b/tests/greenio_test.py index e05a524..4b375ba 100644 --- a/tests/greenio_test.py +++ b/tests/greenio_test.py @@ -613,6 +613,38 @@ class TestGreenSocket(LimitedTestCase): assert select.select([], [s1], [], 0) == ([], [s1], []) +def test_get_fileno_of_a_socket_works(): + class DummySocket(object): + def fileno(self): + return 123 + assert select.get_fileno(DummySocket()) == 123 + + +def test_get_fileno_of_an_int_works(): + assert select.get_fileno(123) == 123 + + +def test_get_fileno_of_wrong_type_fails(): + try: + select.get_fileno('foo') + except TypeError as ex: + assert str(ex) == 'Expected int or long, got ' + else: + assert False, 'Expected TypeError not raised' + + +def test_get_fileno_of_a_socket_with_fileno_returning_wrong_type_fails(): + class DummySocket(object): + def fileno(self): + return 'foo' + try: + select.get_fileno(DummySocket()) + except TypeError as ex: + assert str(ex) == 'Expected int or long, got ' + else: + assert False, 'Expected TypeError not raised' + + class TestGreenPipe(LimitedTestCase): @skip_on_windows def setUp(self):