Python 3: replace "im_self" by "__self__"

The Python 3 removed the "im_self" attribute. This patch
replaces "im_self" by "__self__" attribute.
Original description http://docs.python.org/2/reference/datamodel.html

Change-Id: I0e66553ccebfcae750693177354723f332637cf5
Partial-Bug: #1282514
This commit is contained in:
yangxurong 2014-02-27 09:33:45 +08:00 committed by David Stanek
parent caed79d823
commit 011fc276ea
2 changed files with 9 additions and 3 deletions

View File

@ -62,10 +62,10 @@ def getcallargs(function, *args, **kwargs):
# argnames but not in args or kwargs. Uses 'in' rather than '==' because
# some tests use 'self2'.
if 'self' in argnames[0] or 'cls' == argnames[0]:
# The function may not actually be a method or have im_self.
# The function may not actually be a method or have __self__.
# Typically seen when it's stubbed with mox.
if inspect.ismethod(function) and hasattr(function, 'im_self'):
keyed_args[argnames[0]] = function.im_self
if inspect.ismethod(function) and hasattr(function, '__self__'):
keyed_args[argnames[0]] = function.__self__
else:
keyed_args[argnames[0]] = None

View File

@ -34,6 +34,7 @@ class FuncutilsTestCase(test_base.BaseTestCase):
#implicit self counts as an arg
self.assertEqual(4, len(callargs))
self.assertEqual(self, callargs['self'])
self.assertTrue('instance' in callargs)
self.assertEqual({'uuid': 1}, callargs['instance'])
self.assertTrue('red' in callargs)
@ -48,6 +49,7 @@ class FuncutilsTestCase(test_base.BaseTestCase):
#implicit self counts as an arg
self.assertEqual(4, len(callargs))
self.assertEqual(self, callargs['self'])
self.assertTrue('instance' in callargs)
self.assertEqual({'uuid': 1}, callargs['instance'])
self.assertTrue('red' in callargs)
@ -62,6 +64,7 @@ class FuncutilsTestCase(test_base.BaseTestCase):
#implicit self counts as an arg
self.assertEqual(4, len(callargs))
self.assertEqual(self, callargs['self'])
self.assertTrue('instance' in callargs)
self.assertEqual({'uuid': 1}, callargs['instance'])
self.assertTrue('red' in callargs)
@ -76,6 +79,7 @@ class FuncutilsTestCase(test_base.BaseTestCase):
#implicit self counts as an arg
self.assertEqual(4, len(callargs))
self.assertEqual(self, callargs['self'])
self.assertTrue('instance' in callargs)
self.assertEqual({'uuid': 1}, callargs['instance'])
self.assertTrue('red' in callargs)
@ -90,6 +94,7 @@ class FuncutilsTestCase(test_base.BaseTestCase):
#implicit self counts as an arg
self.assertEqual(4, len(callargs))
self.assertEqual(self, callargs['self'])
self.assertTrue('instance' in callargs)
self.assertEqual({'uuid': 1}, callargs['instance'])
self.assertTrue('red' in callargs)
@ -103,6 +108,7 @@ class FuncutilsTestCase(test_base.BaseTestCase):
callargs = funcutils.getcallargs(self._test_func, *args, **kwargs)
self.assertEqual(4, len(callargs))
self.assertEqual(self, callargs['self'])
self.assertTrue('instance' in callargs)
self.assertEqual({'uuid': 1}, callargs['instance'])
self.assertTrue('red' in callargs)