Port cinder.utils.monkey_patch() to Python 3

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
This commit is contained in:
Victor Stinner 2015-11-05 17:30:30 +01:00
parent 5bc425235b
commit ee14adec87
2 changed files with 5 additions and 2 deletions

View 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))

View 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