diff options
author | Marcel Hellkamp <marc@gsites.de> | 2015-11-28 11:03:01 +0100 |
---|---|---|
committer | Marcel Hellkamp <marc@gsites.de> | 2015-11-28 11:03:01 +0100 |
commit | 49fcac90745c6528a7cfff25ed5ee7bc462ddbe4 (patch) | |
tree | c1142d97caa2f4c3c081929ecae3ee99bcfbcb61 | |
parent | d0eb91ef4484d1e640fbea703717cb2069dcc5b6 (diff) | |
download | bottle-49fcac90745c6528a7cfff25ed5ee7bc462ddbe4.tar.gz |
Added inspection support for func(a, *, b) signature types.
-rw-r--r-- | bottle.py | 11 | ||||
-rw-r--r-- | test/test_route.py | 7 |
2 files changed, 16 insertions, 2 deletions
@@ -94,8 +94,15 @@ try: defaults.append(param.default) return (args, varargs, keywords, tuple(defaults) or None) except ImportError: - from inspect import getargspec - + try: + from inspect import getfullargspec + def getargspec(func): + spec = getfullargspec(func) + kwargs = makelist(spec[0]) + makelist(spec.kwonlyargs) + return kwargs, spec[1], spec[2], spec[3] + except ImportError: + from inspect import getargspec + try: from simplejson import dumps as json_dumps, loads as json_lds except ImportError: # pragma: no cover diff --git a/test/test_route.py b/test/test_route.py index 237d3c7..ba0a06a 100644 --- a/test/test_route.py +++ b/test/test_route.py @@ -48,3 +48,10 @@ class TestRoute(unittest.TestCase): # triggers the "TypeError: 'foo' is not a Python function" self.assertEqual(set(route.get_callback_args()), set(['a', 'b'])) + + if bottle.py3k: + def test_callback_inspection_newsig(self): + env = {} + eval(compile('def foo(a, *, b=5): pass', '<foo>', 'exec'), env, env) + route = bottle.Route(None, None, None, env['foo']) + self.assertEqual(set(route.get_callback_args()), set(['a', 'b'])) |