sphinx icon indicating copy to clipboard operation
sphinx copied to clipboard

Exception during compilation of a project using autosummary+recusive+template.

Open achoum opened this issue 3 years ago • 0 comments

Describe the bug

Hello,

I would like to use the autosummary+recusive logic to document the API of a python library. My code is inspired on JamesALeedham example and available here.

When, running the following code:

.. autosummary::
    :toctree: _autosummary
    :recursive:
    :template: custom-module-template.rst

    library_name

the compilation stop with the exception:

Exception occurred:
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/util/inspect.py", line 853, in getdoc
    return getdoc(meth.__func__)
AttributeError: '_method' object has no attribute '__func__'
The full traceback has been saved in /tmp/sphinx-err-7u4k99_3.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!
make: *** [Makefile:20: html] Error 2

Note: The content of my _template directory is the same as in JamesALeedham's example.

If removing the :template statement, the compilation succeed (but the documentation is incomplete, as expected).

Here is the content of the /tmp/sphinx-err-7u4k99_3.log file:

# Sphinx version: 4.2.0
# Python version: 3.8.10 (CPython)
# Docutils version: 0.16 release
# Jinja2 version: 3.0.3
# Last messages:
#   reading sources... [  1%] _autosummary/tensorflow_decision_forests.component.builder.builder
#   reading sources... [  2%] _autosummary/tensorflow_decision_forests.component.builder.builder.AbstractBuilder
#   reading sources... [  2%] _autosummary/tensorflow_decision_forests.component.builder.builder.AbstractDecisionForestBuilder
#   reading sources... [  2%] _autosummary/tensorflow_decision_forests.component.builder.builder.AdvancedArguments
#   reading sources... [  3%] _autosummary/tensorflow_decision_forests.component.builder.builder.CARTBuilder
#   reading sources... [  3%] _autosummary/tensorflow_decision_forests.component.builder.builder.GradientBoostedTreeBuilder
#   reading sources... [  4%] _autosummary/tensorflow_decision_forests.component.builder.builder.ModelFormat
#   reading sources... [  4%] _autosummary/tensorflow_decision_forests.component.builder.builder.RandomForestBuilder
#   reading sources... [  5%] _autosummary/tensorflow_decision_forests.component.builder.builder_test
#   reading sources... [  5%] _autosummary/tensorflow_decision_forests.component.builder.builder_test.BuilderTest
# Loaded extensions:
#   sphinx.ext.mathjax (4.2.0) from /home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/mathjax.py
#   sphinxcontrib.applehelp (1.0.2) from /home/achoum/.local/lib/python3.8/site-packages/sphinxcontrib/applehelp/__init__.py
#   sphinxcontrib.devhelp (1.0.2) from /home/achoum/.local/lib/python3.8/site-packages/sphinxcontrib/devhelp/__init__.py
#   sphinxcontrib.htmlhelp (2.0.0) from /home/achoum/.local/lib/python3.8/site-packages/sphinxcontrib/htmlhelp/__init__.py
#   sphinxcontrib.serializinghtml (1.1.5) from /home/achoum/.local/lib/python3.8/site-packages/sphinxcontrib/serializinghtml/__init__.py
#   sphinxcontrib.qthelp (1.0.3) from /home/achoum/.local/lib/python3.8/site-packages/sphinxcontrib/qthelp/__init__.py
#   alabaster (0.7.8) from /usr/lib/python3/dist-packages/alabaster/__init__.py
#   sphinx.ext.doctest (4.2.0) from /home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/doctest.py
#   sphinx.ext.autodoc.preserve_defaults (1.0) from /home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/autodoc/preserve_defaults.py
#   sphinx.ext.autodoc.type_comment (4.2.0) from /home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/autodoc/type_comment.py
#   sphinx.ext.autodoc (4.2.0) from /home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/autodoc/__init__.py
#   sphinx.ext.autosummary (4.2.0) from /home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/autosummary/__init__.py
#   sphinx.ext.intersphinx (4.2.0) from /home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/intersphinx.py
#   sphinx.ext.viewcode (4.2.0) from /home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/viewcode.py
#   myst_parser (0.18.0) from /home/achoum/.local/lib/python3.8/site-packages/myst_parser/__init__.py
#   sphinx_rtd_theme (unknown version) from /home/achoum/.local/lib/python3.8/site-packages/sphinx_rtd_theme/__init__.py
Traceback (most recent call last):
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/cmd/build.py", line 280, in build_main
    app.build(args.force_all, filenames)
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/application.py", line 343, in build
    self.builder.build_update()
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/builders/__init__.py", line 293, in build_update
    self.build(to_build,
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/builders/__init__.py", line 307, in build
    updated_docnames = set(self.read())
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/builders/__init__.py", line 414, in read
    self._read_serial(docnames)
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/builders/__init__.py", line 435, in _read_serial
    self.read_doc(docname)
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/builders/__init__.py", line 475, in read_doc
    doctree = read_doc(self.app, self.env, self.env.doc2path(docname))
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/io.py", line 189, in read_doc
    pub.publish()
  File "/usr/lib/python3/dist-packages/docutils/core.py", line 217, in publish
    self.document = self.reader.read(self.source, self.parser,
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/io.py", line 109, in read
    self.parse()
  File "/usr/lib/python3/dist-packages/docutils/readers/__init__.py", line 77, in parse
    self.parser.parse(self.input, document)
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/parsers.py", line 101, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 171, in run
    results = StateMachineWS.run(self, input_lines, input_offset,
  File "/usr/lib/python3/dist-packages/docutils/statemachine.py", line 241, in run
    context, next_state, result = self.check_line(
  File "/usr/lib/python3/dist-packages/docutils/statemachine.py", line 459, in check_line
    return method(match, context, next_state)
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 2770, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 328, in section
    self.new_subsection(title, lineno, messages)
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 394, in new_subsection
    newabsoffset = self.nested_parse(
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 282, in nested_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 197, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/usr/lib/python3/dist-packages/docutils/statemachine.py", line 241, in run
    context, next_state, result = self.check_line(
  File "/usr/lib/python3/dist-packages/docutils/statemachine.py", line 459, in check_line
    return method(match, context, next_state)
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 2345, in explicit_markup
    self.explicit_list(blank_finish)
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 2370, in explicit_list
    newline_offset, blank_finish = self.nested_list_parse(
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 319, in nested_list_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 197, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/usr/lib/python3/dist-packages/docutils/statemachine.py", line 241, in run
    context, next_state, result = self.check_line(
  File "/usr/lib/python3/dist-packages/docutils/statemachine.py", line 459, in check_line
    return method(match, context, next_state)
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 2648, in explicit_markup
    nodelist, blank_finish = self.explicit_construct(match)
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 2355, in explicit_construct
    return method(self, expmatch)
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 2097, in directive
    return self.run_directive(
  File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 2147, in run_directive
    result = directive_instance.run()
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/autodoc/directive.py", line 162, in run
    documenter.generate(more_content=self.content)
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/autodoc/__init__.py", line 1773, in generate
    return super().generate(more_content=more_content,
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/autodoc/__init__.py", line 983, in generate
    self.document_members(all_members)
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/autodoc/__init__.py", line 1764, in document_members
    super().document_members(all_members)
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/autodoc/__init__.py", line 842, in document_members
    for (mname, member, isattr) in self.filter_members(members, want_all):
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/ext/autodoc/__init__.py", line 723, in filter_members
    doc = getdoc(member, self.get_attr, self.config.autodoc_inherit_docstrings,
  File "/home/achoum/.local/lib/python3.8/site-packages/sphinx/util/inspect.py", line 853, in getdoc
    return getdoc(meth.__func__)
AttributeError: '_method' object has no attribute '__func__'

Cheers, M.

How to Reproduce

$ git clone https://github.com/achoum/test_read_the_doc
$ cd test_read_the_doc/docs/rtd
$ pip install -r requirements.txt
$ make html

Stop with exception

Expected behavior

I would expect the compilation to complete without error.

Your project

https://github.com/achoum/test_read_the_doc

Screenshots

No response

OS

Windows 10 + WSL2 running Debian

Python version

3.8.10

Sphinx version

4.2.0

Sphinx extensions

No response

Extra tools

No response

Additional context

No response

achoum avatar Aug 20 '22 20:08 achoum