]> granicus.if.org Git - python/commitdiff
fix inspect.formatargspec on functions with keyword-only arguments without defaults...
authorBenjamin Peterson <benjamin@python.org>
Sat, 17 Jan 2009 04:15:01 +0000 (04:15 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sat, 17 Jan 2009 04:15:01 +0000 (04:15 +0000)
Lib/inspect.py
Lib/test/inspect_fodder2.py
Lib/test/test_inspect.py
Misc/NEWS

index b84aec0f6aaff7dc21012b520c405f233c94042c..45515fca56625184963fb42d388a3660e66176ec 100644 (file)
@@ -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:
index d244935038a7fa2ffe452499c304a54980c7179b..bd7106fea86bebd8f4fff28bf1339089ab78802e 100644 (file)
@@ -105,3 +105,7 @@ def keyworded(*arg1, arg2=1):
 #line 105
 def annotated(arg1: list):
     pass
+
+#line 109
+def keyword_only_arg(*, arg):
+    pass
index ac9fcd7999ce42963ba57cf8bb5db09334af515b..b3aa28cf7ca54459c6b98907e584b3509eb40c8a 100644 (file)
@@ -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):
index 7588f4689ab958a8cb612cf927bbcb9f93da4479..28cd6b6d8f5f6cfa8054e624f2733e842b785841 100644 (file)
--- 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.