]> granicus.if.org Git - python/commitdiff
Issue #23934: Fix inspect.signature to fail correctly for builtin types.
authorYury Selivanov <yselivanov@sprymix.com>
Sat, 30 May 2015 21:08:36 +0000 (17:08 -0400)
committerYury Selivanov <yselivanov@sprymix.com>
Sat, 30 May 2015 21:08:36 +0000 (17:08 -0400)
Initial patch by James Powell.

Lib/inspect.py
Lib/test/test_inspect.py
Misc/NEWS

index 57cb3dc0ac1f8e0599b499f206e6d980a22e5ce3..25ddd26c66129cce04c4d2c453a24f2f5e878c3e 100644 (file)
@@ -2255,9 +2255,13 @@ def _signature_from_callable(obj, *,
             if type not in obj.__mro__:
                 # We have a class (not metaclass), but no user-defined
                 # __init__ or __new__ for it
-                if obj.__init__ is object.__init__:
+                if (obj.__init__ is object.__init__ and
+                    obj.__new__ is object.__new__):
                     # Return a signature of 'object' builtin.
                     return signature(object)
+                else:
+                    raise ValueError(
+                        'no signature found for builtin type {!r}'.format(obj))
 
     elif not isinstance(obj, _NonUserDefinedCallables):
         # An object with __call__
index 9f09b830e762a0e9dfcf8fd30259ffd689f8f158..4695da834b531fb130261b3a1db03454de342f54 100644 (file)
@@ -1980,9 +1980,14 @@ class TestSignatureObject(unittest.TestCase):
     @cpython_only
     def test_signature_on_builtins_no_signature(self):
         import _testcapi
-        with self.assertRaisesRegex(ValueError, 'no signature found for builtin'):
+        with self.assertRaisesRegex(ValueError,
+                                    'no signature found for builtin'):
             inspect.signature(_testcapi.docstring_no_signature)
 
+        with self.assertRaisesRegex(ValueError,
+                                    'no signature found for builtin'):
+            inspect.signature(str)
+
     def test_signature_on_non_function(self):
         with self.assertRaisesRegex(TypeError, 'is not a callable object'):
             inspect.signature(42)
index 2d418129490df86d7341376c637b9dd59d3dbb9f..d0223c514cbea19be4469ee310f4afe014c8969d 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -31,6 +31,9 @@ Library
 
 - Issue #16991: Add a C implementation of OrderedDict.
 
+- Issue #23934: Fix inspect.signature to fail correctly for builtin types
+  lacking signature information.  Initial patch by James Powell.
+
 
 What's New in Python 3.5.0 beta 1?
 ==================================