From 690868bc99ee4d82edc2546b4b5fa594b397cb37 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 18 Dec 2013 14:23:24 +0100 Subject: [PATCH] Minor Python 3 fixes basestring does not exist anymore in Python 3: use six.string_types instead. In "try: .../except Exception as err: ...", err is a local variable, it does no more exist after the except block. Copy the exception in a new cls_error variable to fix Python 3 support. Extract of Python 3 documentation: "When an exception has been assigned using as target, it is cleared at the end of the except clause. (...) Exceptions are cleared because with the traceback attached to them, they form a reference cycle with the stack frame, keeping all locals in that frame alive until the next garbage collection occurs." http://docs.python.org/3.3/reference/compound_stmts.html#try Change-Id: I2efb14b3838f78d1ed5e09b3ccd4e796a3448aee --- oslo/messaging/transport.py | 4 ++-- tests/test_exception_serialization.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/oslo/messaging/transport.py b/oslo/messaging/transport.py index 4ffefc91e..20274a023 100644 --- a/oslo/messaging/transport.py +++ b/oslo/messaging/transport.py @@ -28,6 +28,7 @@ __all__ = [ ] from oslo.config import cfg +import six from stevedore import driver from oslo.messaging import exceptions @@ -352,8 +353,7 @@ class TransportURL(object): if not url: return cls(conf, aliases=aliases) - # FIXME(flaper87): Not PY3K compliant - if not isinstance(url, basestring): + if not isinstance(url, six.string_types): raise InvalidTransportURL(url, 'Wrong URL type') url = urlutils.urlparse(url) diff --git a/tests/test_exception_serialization.py b/tests/test_exception_serialization.py index 4c06c3a2c..f081c9681 100644 --- a/tests/test_exception_serialization.py +++ b/tests/test_exception_serialization.py @@ -119,6 +119,7 @@ class SerializeRemoteExceptionTestCase(test_utils.BaseTestCase): try: raise self.cls(*self.args, **self.kwargs) except Exception as ex: + cls_error = ex if self.add_remote: ex = add_remote_postfix(ex) raise ex @@ -137,7 +138,7 @@ class SerializeRemoteExceptionTestCase(test_utils.BaseTestCase): self.assertEqual(failure['kwargs'], self.kwargs) # Note: _Remote prefix not stripped from tracebacks - tb = ex.__class__.__name__ + ': ' + self.msg + tb = cls_error.__class__.__name__ + ': ' + self.msg self.assertIn(tb, ''.join(failure['tb'])) if self.log_failure: