From ced8895b127c6ea84c74dc4df495d0f5e2560d74 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sat, 23 Oct 2021 02:14:57 +0900 Subject: [PATCH] Fix #9756: autodoc: Crashed if classmethod does not have __func__ attribute --- CHANGES | 1 + sphinx/util/inspect.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 933abe2f714..68048b27607 100644 --- a/CHANGES +++ b/CHANGES @@ -60,6 +60,7 @@ Bugs fixed * #9657: autodoc: The base class for a subclass of mocked object is incorrect * #9607: autodoc: Incorrect base class detection for the subclasses of the generic class +* #9756: autodoc: Crashed if classmethod does not have __func__ attribute * #9630: autosummary: Failed to build summary table if :confval:`primary_domain` is not 'py' * #9670: html: Fix download file with special characters diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py index 4482f20872f..6a89d20e067 100644 --- a/sphinx/util/inspect.py +++ b/sphinx/util/inspect.py @@ -865,7 +865,7 @@ def getdoc(obj: Any, attrgetter: Callable = safe_getattr, if cls and name and isclassmethod(obj, cls, name): for basecls in getmro(cls): meth = basecls.__dict__.get(name) - if meth: + if meth and hasattr(meth, '__func__'): return getdoc(meth.__func__) doc = attrgetter(obj, '__doc__', None)