]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Port cinder.utils.monkey_patch() to Python 3
authorVictor Stinner <vstinner@redhat.com>
Thu, 5 Nov 2015 16:30:30 +0000 (17:30 +0100)
committerVictor Stinner <vstinner@redhat.com>
Sun, 8 Nov 2015 20:40:17 +0000 (21:40 +0100)
On Python 3, unbound methods are regular functions: use pass
inspect.isfunction to inspect.getmembers().

tox.ini: add test_utils to Python 3.4.

Partial-Implements: blueprint cinder-python3
Change-Id: I4fe9936792a43aff301010780e86244bdf2d05de

cinder/utils.py
tests-py3.txt

index 58f23134b172c427f08a32475dfe3f3b817923ad..3eef2ac3c0b31843bd53fbd368acb6e0abd642c3 100644 (file)
@@ -389,12 +389,14 @@ def monkey_patch():
             # set the decorator for the class methods
             if isinstance(module_data[key], pyclbr.Class):
                 clz = importutils.import_class("%s.%s" % (module, key))
-                for method, func in inspect.getmembers(clz, inspect.ismethod):
+                # On Python 3, unbound methods are regular functions
+                predicate = inspect.isfunction if six.PY3 else inspect.ismethod
+                for method, func in inspect.getmembers(clz, predicate):
                     setattr(
                         clz, method,
                         decorator("%s.%s.%s" % (module, key, method), func))
             # set the decorator for the function
-            if isinstance(module_data[key], pyclbr.Function):
+            elif isinstance(module_data[key], pyclbr.Function):
                 func = importutils.import_class("%s.%s" % (module, key))
                 setattr(sys.modules[module], key,
                         decorator("%s.%s" % (module, key), func))
index 8e07e9e3cb1d4a438d9a238669979f85bc11686a..30fb906aedf73652e9c71da6a270a04e9cccc301 100644 (file)
@@ -103,6 +103,7 @@ cinder.tests.unit.test_ssh_utils
 cinder.tests.unit.test_test
 cinder.tests.unit.test_test_utils
 cinder.tests.unit.test_tintri
+cinder.tests.unit.test_utils
 cinder.tests.unit.test_v6000_common
 cinder.tests.unit.test_v6000_fcp
 cinder.tests.unit.test_v6000_iscsi