diff options
author | John Szakmeister <john@szakmeister.net> | 2014-03-15 06:15:42 -0400 |
---|---|---|
committer | John Szakmeister <john@szakmeister.net> | 2014-03-19 05:32:02 -0400 |
commit | 192694ed9f70447317bd54e427a17208bddf03be (patch) | |
tree | c01bcef2bd5a5e0cfc126cfc1388827967ad8a27 | |
parent | 43c35e49106916f51f676455888fe7a39d030113 (diff) | |
download | nose-192694ed9f70447317bd54e427a17208bddf03be.tar.gz |
Fix #783: try_run is broken with Python 3.4
It turns out that we expected inspect.getargspec() to only work on
functions (versus classes that are callable). Python 3.4 has changed
this behavior and now happily returns the arg spec. Let's try to detect
this situation by checking the __call__() method to if it's actually the
method of a class. If so, pop the 'self' argument off of args--similar
to what's done in the exceptional case below.
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | nose/util.py | 4 |
2 files changed, 4 insertions, 1 deletions
@@ -3,6 +3,7 @@ Under Development - Fixed #782: Test failures with Python >= 3.3 Patch by Dmitry Shachnev. - Fixed #780: Fix a regression with Python 3 +- Fixed #783: try_run is broken with Python 3.4 1.3.1 diff --git a/nose/util.py b/nose/util.py index 7995700..dcb5fef 100644 --- a/nose/util.py +++ b/nose/util.py @@ -8,7 +8,7 @@ import re import sys import types import unittest -from nose.pyversion import ClassType, TypeType, isgenerator +from nose.pyversion import ClassType, TypeType, isgenerator, ismethod log = logging.getLogger('nose') @@ -449,6 +449,8 @@ def try_run(obj, names): # py.test compatibility try: args, varargs, varkw, defaults = inspect.getargspec(func) + if hasattr(func, '__call__') and ismethod(func.__call__): + args.pop(0) except TypeError: # Not a function. If it's callable, call it anyway if hasattr(func, '__call__'): |