From 1567281287f780d83d5c1b1202a7e551fd0b3998 Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+AA-Turner@users.noreply.github.com> Date: Mon, 28 Aug 2023 04:35:26 +0100 Subject: [PATCH] autodoc: Fix UnboundLocalError in ``filter_members`` (#11651) --- sphinx/ext/autodoc/__init__.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/sphinx/ext/autodoc/__init__.py b/sphinx/ext/autodoc/__init__.py index c042aa71a7f..ac1b5cec6f6 100644 --- a/sphinx/ext/autodoc/__init__.py +++ b/sphinx/ext/autodoc/__init__.py @@ -678,9 +678,23 @@ def is_filtered_inherited_member(name: str, obj: Any) -> bool: try: membername = obj.__name__ member = obj.object - # if isattr is True, the member is documented as an attribute - isattr = member is INSTANCEATTR or (namespace, membername) in attr_docs + except AttributeError: + if isinstance(obj, ObjectMember): + raise + # To be removed, retained for compatibility. + # See https://github.com/sphinx-doc/sphinx/issues/11631 + membername, member = obj + warnings.warn( + 'Returning tuples of (name, object) as ' + 'the second return value from get_object_members() is deprecated. ' + 'Return ObjectMember(name, object) instances instead.', + RemovedInSphinx80Warning, stacklevel=2, + ) + + # if isattr is True, the member is documented as an attribute + isattr = member is INSTANCEATTR or (namespace, membername) in attr_docs + try: doc = getdoc(member, self.get_attr, self.config.autodoc_inherit_docstrings, self.object, membername) if not isinstance(doc, str):