From 9953a8dfd6b078b58a7c73991660537677d11b56 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sat, 17 Jan 2009 04:15:01 +0000 Subject: fix inspect.formatargspec on functions with keyword-only arguments without defaults #4959 --- Lib/inspect.py | 2 +- Lib/test/inspect_fodder2.py | 4 ++++ Lib/test/test_inspect.py | 7 +++++++ Misc/NEWS | 3 +++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Lib/inspect.py b/Lib/inspect.py index b84aec0..45515fc 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -894,7 +894,7 @@ def formatargspec(args, varargs=None, varkw=None, defaults=None, if kwonlyargs: for kwonlyarg in kwonlyargs: spec = formatargandannotation(kwonlyarg) - if kwonlyarg in kwonlydefaults: + if kwonlydefaults and kwonlyarg in kwonlydefaults: spec += formatvalue(kwonlydefaults[kwonlyarg]) specs.append(spec) if varkw is not None: diff --git a/Lib/test/inspect_fodder2.py b/Lib/test/inspect_fodder2.py index d244935..bd7106f 100644 --- a/Lib/test/inspect_fodder2.py +++ b/Lib/test/inspect_fodder2.py @@ -105,3 +105,7 @@ def keyworded(*arg1, arg2=1): #line 105 def annotated(arg1: list): pass + +#line 109 +def keyword_only_arg(*, arg): + pass diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index ac9fcd7..b3aa28c 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -386,6 +386,9 @@ class TestClassesAndFunctions(unittest.TestCase): self.assertRaises(ValueError, self.assertArgSpecEquals, mod2.annotated, []) + self.assertRaises(ValueError, self.assertArgSpecEquals, + mod2.keyword_only_arg, []) + def test_getfullargspec(self): self.assertFullArgSpecEquals(mod2.keyworded, [], varargs_e='arg1', @@ -396,6 +399,10 @@ class TestClassesAndFunctions(unittest.TestCase): self.assertFullArgSpecEquals(mod2.annotated, ['arg1'], ann_e={'arg1' : list}, formatted='(arg1: list)') + self.assertFullArgSpecEquals(mod2.keyword_only_arg, [], + kwonlyargs_e=['arg'], + formatted='(*, arg)') + def test_getargspec_method(self): class A(object): diff --git a/Misc/NEWS b/Misc/NEWS index 7588f46..28cd6b6 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -126,6 +126,9 @@ Core and Builtins Library ------- +- Issue #4959: inspect.formatargspec now works for keyword only arguments + without defaults. + - Issue #3826 and #4791: The socket module now closes the underlying socket appropriately when it is being used via socket.makefile() objects rather than delaying the close by waiting for garbage collection to do it. -- cgit v0.12