https://github.com/python/cpython/commit/4e7716554b3d1107f0ab201555cb4c1fefd21413
commit: 4e7716554b3d1107f0ab201555cb4c1fefd21413
branch: 3.13
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2024-07-25T10:11:47+03:00
summary:

[3.13] gh-122087: Restore ismethoddescriptor() and isroutine() for partial 
objects (GH-122218)

Now they return False again.

files:
A Misc/NEWS.d/next/Library/2024-07-24-09-29-55.gh-issue-122087.FdBrWo.rst
M Lib/inspect.py
M Lib/test/test_inspect/test_inspect.py

diff --git a/Lib/inspect.py b/Lib/inspect.py
index bf979e8e63ff65..845d55f41751a0 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -325,6 +325,11 @@ def ismethoddescriptor(object):
     if isclass(object) or ismethod(object) or isfunction(object):
         # mutual exclusion
         return False
+    if isinstance(object, functools.partial):
+        # Lie for children.  The addition of partial.__get__
+        # doesn't currently change the partial objects behaviour,
+        # not counting a warning about future changes.
+        return False
     tp = type(object)
     return (hasattr(tp, "__get__")
             and not hasattr(tp, "__set__")
diff --git a/Lib/test/test_inspect/test_inspect.py 
b/Lib/test/test_inspect/test_inspect.py
index 5d0f32884d1406..de17558dd2d86a 100644
--- a/Lib/test/test_inspect/test_inspect.py
+++ b/Lib/test/test_inspect/test_inspect.py
@@ -405,6 +405,8 @@ def test_isroutine(self):
         self.assertFalse(inspect.isroutine(type))
         self.assertFalse(inspect.isroutine(int))
         self.assertFalse(inspect.isroutine(type('some_class', (), {})))
+        # partial
+        self.assertFalse(inspect.isroutine(functools.partial(mod.spam)))
 
     def test_isclass(self):
         self.istest(inspect.isclass, 'mod.StupidGit')
@@ -1906,6 +1908,7 @@ def function():
         self.assertFalse(inspect.ismethoddescriptor(Owner.static_method))
         self.assertFalse(inspect.ismethoddescriptor(function))
         self.assertFalse(inspect.ismethoddescriptor(a_lambda))
+        
self.assertFalse(inspect.ismethoddescriptor(functools.partial(function)))
 
     def test_descriptor_being_a_class(self):
         class MethodDescriptorMeta(type):
diff --git 
a/Misc/NEWS.d/next/Library/2024-07-24-09-29-55.gh-issue-122087.FdBrWo.rst 
b/Misc/NEWS.d/next/Library/2024-07-24-09-29-55.gh-issue-122087.FdBrWo.rst
new file mode 100644
index 00000000000000..0e77741b3534ad
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-07-24-09-29-55.gh-issue-122087.FdBrWo.rst
@@ -0,0 +1,2 @@
+Restore :func:`inspect.ismethoddescriptor` and :func:`inspect.isroutine`
+returning ``False`` for :class:`functools.partial` objects.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to