From 1de0a153bb0d2eb0c7c1413f0d51762bcbaa57f1 Mon Sep 17 00:00:00 2001 From: Furkan Onder Date: Tue, 16 May 2023 17:34:44 +0000 Subject: [PATCH] gh-75367: Fix data descriptor detection in inspect.getattr_static (GH-104517) (cherry picked from commit 5e9f471e7db30893fb3f42681f17fdcdb70069ee) Co-authored-by: Furkan Onder Co-authored-by: Carl Meyer --- Lib/inspect.py | 6 ++++-- Lib/test/test_inspect.py | 3 +++ .../Library/2023-05-16-11-02-44.gh-issue-75367.qLWR35.rst | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2023-05-16-11-02-44.gh-issue-75367.qLWR35.rst diff --git a/Lib/inspect.py b/Lib/inspect.py index 75d33f2ce7e73e..14569a510a0501 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -1829,8 +1829,10 @@ def getattr_static(obj, attr, default=_sentinel): klass_result = _check_class(klass, attr) if instance_result is not _sentinel and klass_result is not _sentinel: - if (_check_class(type(klass_result), '__get__') is not _sentinel and - _check_class(type(klass_result), '__set__') is not _sentinel): + if _check_class(type(klass_result), "__get__") is not _sentinel and ( + _check_class(type(klass_result), "__set__") is not _sentinel + or _check_class(type(klass_result), "__delete__") is not _sentinel + ): return klass_result if instance_result is not _sentinel: diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index c44eed027e9403..2783f7f8a08e88 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -1993,6 +1993,9 @@ class Foo(object): descriptor.__set__ = lambda s, i, v: None self.assertEqual(inspect.getattr_static(foo, 'd'), Foo.__dict__['d']) + del descriptor.__set__ + descriptor.__delete__ = lambda s, i, o: None + self.assertEqual(inspect.getattr_static(foo, 'd'), Foo.__dict__['d']) def test_metaclass_with_descriptor(self): class descriptor(object): diff --git a/Misc/NEWS.d/next/Library/2023-05-16-11-02-44.gh-issue-75367.qLWR35.rst b/Misc/NEWS.d/next/Library/2023-05-16-11-02-44.gh-issue-75367.qLWR35.rst new file mode 100644 index 00000000000000..554c425e6a7864 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-05-16-11-02-44.gh-issue-75367.qLWR35.rst @@ -0,0 +1 @@ +Fix data descriptor detection in :func:`inspect.getattr_static`.