mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Fix #8602: autodoc: The `autodoc-process-docstring
` event is emitted to the non-datadescriptors unexpectedly
This commit is contained in:
parent
7ae7eab65d
commit
97f36a2d02
3
CHANGES
3
CHANGES
@ -16,6 +16,9 @@ Features added
|
|||||||
Bugs fixed
|
Bugs fixed
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
* #8602: autodoc: The ``autodoc-process-docstring`` event is emitted to the
|
||||||
|
non-datadescriptors unexpectedly
|
||||||
|
|
||||||
Testing
|
Testing
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
@ -2092,18 +2092,36 @@ class NonDataDescriptorMixin(DataDocumenterMixinBase):
|
|||||||
and :value: header will be suppressed unexpectedly.
|
and :value: header will be suppressed unexpectedly.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def import_object(self, raiseerror: bool = False) -> bool:
|
||||||
|
ret = super().import_object(raiseerror) # type: ignore
|
||||||
|
if ret and not inspect.isattributedescriptor(self.object):
|
||||||
|
self.non_data_descriptor = True
|
||||||
|
else:
|
||||||
|
self.non_data_descriptor = False
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
def should_suppress_value_header(self) -> bool:
|
def should_suppress_value_header(self) -> bool:
|
||||||
return (inspect.isattributedescriptor(self.object) or
|
return (not getattr(self, 'non_data_descriptor', False) or
|
||||||
super().should_suppress_directive_header())
|
super().should_suppress_directive_header())
|
||||||
|
|
||||||
def get_doc(self, encoding: str = None, ignore: int = None) -> List[List[str]]:
|
def get_doc(self, encoding: str = None, ignore: int = None) -> List[List[str]]:
|
||||||
if not inspect.isattributedescriptor(self.object):
|
if getattr(self, 'non_data_descriptor', False):
|
||||||
# the docstring of non datadescriptor is very probably the wrong thing
|
# the docstring of non datadescriptor is very probably the wrong thing
|
||||||
# to display
|
# to display
|
||||||
return []
|
return []
|
||||||
else:
|
else:
|
||||||
return super().get_doc(encoding, ignore) # type: ignore
|
return super().get_doc(encoding, ignore) # type: ignore
|
||||||
|
|
||||||
|
def add_content(self, more_content: Optional[StringList], no_docstring: bool = False
|
||||||
|
) -> None:
|
||||||
|
if getattr(self, 'non_data_descriptor', False):
|
||||||
|
# the docstring of non datadescriptor is very probably the wrong thing
|
||||||
|
# to display
|
||||||
|
no_docstring = True
|
||||||
|
|
||||||
|
super().add_content(more_content, no_docstring=no_docstring) # type: ignore
|
||||||
|
|
||||||
|
|
||||||
class SlotsMixin(DataDocumenterMixinBase):
|
class SlotsMixin(DataDocumenterMixinBase):
|
||||||
"""
|
"""
|
||||||
|
@ -34,6 +34,23 @@ def test_process_docstring(app):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.sphinx('html', testroot='ext-autodoc')
|
||||||
|
def test_process_docstring_for_nondatadescriptor(app):
|
||||||
|
def on_process_docstring(app, what, name, obj, options, lines):
|
||||||
|
raise
|
||||||
|
|
||||||
|
app.connect('autodoc-process-docstring', on_process_docstring)
|
||||||
|
|
||||||
|
actual = do_autodoc(app, 'attribute', 'target.AttCls.a1')
|
||||||
|
assert list(actual) == [
|
||||||
|
'',
|
||||||
|
'.. py:attribute:: AttCls.a1',
|
||||||
|
' :module: target',
|
||||||
|
' :value: hello world',
|
||||||
|
'',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('html', testroot='ext-autodoc')
|
@pytest.mark.sphinx('html', testroot='ext-autodoc')
|
||||||
def test_cut_lines(app):
|
def test_cut_lines(app):
|
||||||
app.connect('autodoc-process-docstring',
|
app.connect('autodoc-process-docstring',
|
||||||
|
Loading…
Reference in New Issue
Block a user