-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Closed
Milestone
Description
Describe the bug
The failure is when using the solution by James Leedham on this SO post, a workaround for autodoc not being recursive. The broader issue is that the stack trace provides no information about what files the failure occurred on (or why it occurred). See the log at the bottom of this issue.
To Reproduce
Steps to reproduce the behavior:
<Paste your command-line here which cause the problem>
$ git clone https://github.com/dmyersturnbull/mandos.git
$ cd mandos
$ git checkout ddff4b52e974b6f4de505d1fb1cee7908acba9a7
$ pip install .
$ sphinx-build -b html docs docs/_build
Expected behavior
Docs to build without errors, of course :)
Your project
https://github.com/dmyersturnbull/mandos
Environment info
- OS: Win
- Python version: 3.9.1
- Sphinx version: 3.4.3
- Sphinx extensions: sphinx.ext.autodoc, sphinx.ext.autosummary, sphinx_autodoc_typehints, sphinx.ext.napoleon, sphinx_copybutton, sphinxcontrib.mermaid, sphinx_rtd_theme
- Extra tools: none
Additional context
The cause is this line in custom-module-template.rst:
:template: custom-module-template.rst
If I remove that line: It builds without failure, BUT only builds reST and HTML pages for classes directly under mandos, not those under submodules.
# Sphinx version: 3.4.3
# Python version: 3.9.1 (CPython)
# Docutils version: 0.16 release
# Jinja2 version: 2.11.2
# Last messages:
# updating environment:
# [new config]
# 529 added, 0 changed, 0 removed
# reading sources... [ 0%] _autosummary/mandos
# reading sources... [ 0%] _autosummary/mandos.InterceptHandler
# reading sources... [ 0%] _autosummary/mandos.MandosLogging
# reading sources... [ 0%] _autosummary/mandos.MandosMetadata
# reading sources... [ 0%] _autosummary/mandos.Path
# reading sources... [ 1%] _autosummary/mandos.cli
# reading sources... [ 1%] _autosummary/mandos.cli.Apis
# Loaded extensions:
# sphinx.ext.mathjax (3.4.3) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\mathjax.py
# sphinxcontrib.applehelp (1.0.2) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinxcontrib\applehelp\__init__.py
# sphinxcontrib.devhelp (1.0.2) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinxcontrib\devhelp\__init__.py
# sphinxcontrib.htmlhelp (1.0.3) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinxcontrib\htmlhelp\__init__.py
# sphinxcontrib.serializinghtml (1.1.4) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinxcontrib\serializinghtml\__init__.py
# sphinxcontrib.qthelp (1.0.3) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinxcontrib\qthelp\__init__.py
# alabaster (0.7.12) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\alabaster\__init__.py
# sphinx.ext.autodoc.type_comment (3.4.3) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autodoc\type_comment.py
# sphinx.ext.autodoc (3.4.3) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autodoc\__init__.py
# sphinx.ext.autosummary (3.4.3) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autosummary\__init__.py
# sphinx_autodoc_typehints (unknown version) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx_autodoc_typehints.py
# sphinx.ext.napoleon (3.4.3) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\napoleon\__init__.py
# sphinx_copybutton (0.3.1) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx_copybutton\__init__.py
# sphinxcontrib.mermaid (3.4.3) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinxcontrib\mermaid.py
# sphinx_rtd_theme (unknown version) from c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx_rtd_theme\__init__.py
Traceback (most recent call last):
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\cmd\build.py", line 280, in build_main
app.build(args.force_all, filenames)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\application.py", line 352, in build
self.builder.build_update()
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\builders\__init__.py", line 296, in build_update
self.build(to_build,
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\builders\__init__.py", line 310, in build
updated_docnames = set(self.read())
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\builders\__init__.py", line 417, in read
self._read_serial(docnames)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\builders\__init__.py", line 438, in _read_serial
self.read_doc(docname)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\builders\__init__.py", line 478, in read_doc
doctree = read_doc(self.app, self.env, self.env.doc2path(docname))
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\io.py", line 221, in read_doc
pub.publish()
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\core.py", line 217, in publish
self.document = self.reader.read(self.source, self.parser,
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\io.py", line 126, in read
self.parse()
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\readers\__init__.py", line 77, in parse
self.parser.parse(self.input, document)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\parsers.py", line 104, in parse
self.statemachine.run(inputlines, document, inliner=self.inliner)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 170, in run
results = StateMachineWS.run(self, input_lines, input_offset,
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 241, in run
context, next_state, result = self.check_line(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 459, in check_line
return method(match, context, next_state)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2769, in underline
self.section(title, source, style, lineno - 1, messages)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 327, in section
self.new_subsection(title, lineno, messages)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 393, in new_subsection
newabsoffset = self.nested_parse(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 281, in nested_parse
state_machine.run(block, input_offset, memo=self.memo,
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 196, in run
results = StateMachineWS.run(self, input_lines, input_offset)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 241, in run
context, next_state, result = self.check_line(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 459, in check_line
return method(match, context, next_state)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2344, in explicit_markup
self.explicit_list(blank_finish)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2369, in explicit_list
newline_offset, blank_finish = self.nested_list_parse(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 318, in nested_list_parse
state_machine.run(block, input_offset, memo=self.memo,
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 196, in run
results = StateMachineWS.run(self, input_lines, input_offset)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 241, in run
context, next_state, result = self.check_line(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 459, in check_line
return method(match, context, next_state)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2647, in explicit_markup
nodelist, blank_finish = self.explicit_construct(match)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2354, in explicit_construct
return method(self, expmatch)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2096, in directive
return self.run_directive(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2146, in run_directive
result = directive_instance.run()
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autodoc\directive.py", line 157, in run
result = parse_generated_content(self.state, params.result, documenter)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autodoc\directive.py", line 104, in parse_generated_content
state.nested_parse(content, 0, node)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 281, in nested_parse
state_machine.run(block, input_offset, memo=self.memo,
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 196, in run
results = StateMachineWS.run(self, input_lines, input_offset)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 241, in run
context, next_state, result = self.check_line(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 459, in check_line
return method(match, context, next_state)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2342, in explicit_markup
nodelist, blank_finish = self.explicit_construct(match)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2354, in explicit_construct
return method(self, expmatch)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2096, in directive
return self.run_directive(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2146, in run_directive
result = directive_instance.run()
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\domains\__init__.py", line 285, in run
return super().run()
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\directives\__init__.py", line 207, in run
self.state.nested_parse(self.content, self.content_offset, contentnode)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 281, in nested_parse
state_machine.run(block, input_offset, memo=self.memo,
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 196, in run
results = StateMachineWS.run(self, input_lines, input_offset)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 241, in run
context, next_state, result = self.check_line(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 459, in check_line
return method(match, context, next_state)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2344, in explicit_markup
self.explicit_list(blank_finish)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2369, in explicit_list
newline_offset, blank_finish = self.nested_list_parse(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 318, in nested_list_parse
state_machine.run(block, input_offset, memo=self.memo,
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 196, in run
results = StateMachineWS.run(self, input_lines, input_offset)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 241, in run
context, next_state, result = self.check_line(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\statemachine.py", line 459, in check_line
return method(match, context, next_state)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2647, in explicit_markup
nodelist, blank_finish = self.explicit_construct(match)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2354, in explicit_construct
return method(self, expmatch)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2096, in directive
return self.run_directive(
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\docutils\parsers\rst\states.py", line 2146, in run_directive
result = directive_instance.run()
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autosummary\__init__.py", line 247, in run
items = self.get_items(names)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autosummary\__init__.py", line 349, in get_items
if not documenter.import_object():
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autodoc\__init__.py", line 2344, in import_object
ret = super().import_object(raiseerror=True)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autodoc\__init__.py", line 2147, in import_object
ret = super().import_object(raiseerror) # type: ignore
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autodoc\__init__.py", line 2222, in import_object
return super().import_object(raiseerror=True) # type: ignore
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autodoc\__init__.py", line 2100, in import_object
ret = super().import_object(raiseerror) # type: ignore
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autodoc\__init__.py", line 421, in import_object
ret = import_object(self.modname, self.objpath, self.objtype,
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\ext\autodoc\importer.py", line 108, in import_object
logger.debug('[autodoc] => %r', obj)
File "c:\users\dmyer\.conda\envs\py39\lib\logging\__init__.py", line 1788, in debug
self.log(DEBUG, msg, *args, **kwargs)
File "c:\users\dmyer\.conda\envs\py39\lib\site-packages\sphinx\util\logging.py", line 126, in log
super().log(level, msg, *args, **kwargs)
File "c:\users\dmyer\.conda\envs\py39\lib\logging\__init__.py", line 1832, in log
self.logger.log(level, msg, *args, **kwargs)
File "c:\users\dmyer\.conda\envs\py39\lib\logging\__init__.py", line 1500, in log
self._log(level, msg, args, **kwargs)
File "c:\users\dmyer\.conda\envs\py39\lib\logging\__init__.py", line 1575, in _log
record = self.makeRecord(self.name, level, fn, lno, msg, args,
File "c:\users\dmyer\.conda\envs\py39\lib\logging\__init__.py", line 1544, in makeRecord
rv = _logRecordFactory(name, level, fn, lno, msg, args, exc_info, func,
File "c:\users\dmyer\.conda\envs\py39\lib\logging\__init__.py", line 304, in __init__
if (args and len(args) == 1 and isinstance(args[0], collections.abc.Mapping)
File "c:\users\dmyer\.conda\envs\py39\lib\abc.py", line 98, in __instancecheck__
return _abc_instancecheck(cls, instance)
File "c:\users\dmyer\.conda\envs\py39\lib\abc.py", line 102, in __subclasscheck__
return _abc_subclasscheck(cls, subclass)
TypeError: issubclass() arg 1 must be a class