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

Now they return False again.
This commit is contained in:
Serhiy Storchaka 2024-07-25 10:11:47 +03:00 committed by GitHub
parent 716c6771fc
commit 4e7716554b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 10 additions and 0 deletions

View file

@ -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__")

View file

@ -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):

View file

@ -0,0 +1,2 @@
Restore :func:`inspect.ismethoddescriptor` and :func:`inspect.isroutine`
returning ``False`` for :class:`functools.partial` objects.