Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AttributeError: 'tuple' object has no attribute 'lstrip' in Sphinx 4.3.0 #9870

Closed
testworksau opened this issue Nov 19, 2021 · 3 comments
Closed

Comments

@testworksau
Copy link

Describe the bug

We can build our (private) documentation fine in Sphinx 4.2.0.

In 4.3.0, with the same code, we get the error mentioned in the title, with this stack trace (modified sources to remove potentially sensitive information)

# Sphinx version: 4.3.0
# Python version: 3.6.9 (CPython)
# Docutils version: 0.18 release
# Jinja2 version: 3.0.3
# Last messages:
#   reading sources... [ 25%] i.s.i.panels
#   
#   reading sources... [ 25%] i.s.i.utils
#   
#   reading sources... [ 25%] i.s.i
#   
#   reading sources... [ 25%] i.s.io
#   
#   reading sources... [ 26%] i.s.io.tests
#   
# Loaded extensions:
#   sphinx.ext.mathjax (4.3.0) from /usr/local/lib/python3.6/dist-packages/sphinx/ext/mathjax.py
#   sphinxcontrib.applehelp (1.0.2) from /usr/local/lib/python3.6/dist-packages/sphinxcontrib/applehelp/__init__.py
#   sphinxcontrib.devhelp (1.0.2) from /usr/local/lib/python3.6/dist-packages/sphinxcontrib/devhelp/__init__.py
#   sphinxcontrib.htmlhelp (2.0.0) from /usr/local/lib/python3.6/dist-packages/sphinxcontrib/htmlhelp/__init__.py
#   sphinxcontrib.serializinghtml (1.1.5) from /usr/local/lib/python3.6/dist-packages/sphinxcontrib/serializinghtml/__init__.py
#   sphinxcontrib.qthelp (1.0.3) from /usr/local/lib/python3.6/dist-packages/sphinxcontrib/qthelp/__init__.py
#   alabaster (0.7.12) from /usr/local/lib/python3.6/dist-packages/alabaster/__init__.py
#   sphinx.ext.autodoc.preserve_defaults (1.0) from /usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/preserve_defaults.py
#   sphinx.ext.autodoc.type_comment (4.3.0) from /usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/type_comment.py
#   sphinx.ext.autodoc (4.3.0) from /usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py
#   sphinx.ext.viewcode (4.3.0) from /usr/local/lib/python3.6/dist-packages/sphinx/ext/viewcode.py
#   sphinxcontrib.napoleon (0.7) from /usr/local/lib/python3.6/dist-packages/sphinxcontrib/napoleon/__init__.py
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/sphinx/cmd/build.py", line 280, in build_main
    app.build(args.force_all, filenames)
  File "/usr/local/lib/python3.6/dist-packages/sphinx/application.py", line 344, in build
    self.builder.build_update()
  File "/usr/local/lib/python3.6/dist-packages/sphinx/builders/__init__.py", line 296, in build_update
    len(to_build))
  File "/usr/local/lib/python3.6/dist-packages/sphinx/builders/__init__.py", line 308, in build
    updated_docnames = set(self.read())
  File "/usr/local/lib/python3.6/dist-packages/sphinx/builders/__init__.py", line 415, in read
    self._read_serial(docnames)
  File "/usr/local/lib/python3.6/dist-packages/sphinx/builders/__init__.py", line 436, in _read_serial
    self.read_doc(docname)
  File "/usr/local/lib/python3.6/dist-packages/sphinx/builders/__init__.py", line 476, in read_doc
    doctree = read_doc(self.app, self.env, self.env.doc2path(docname))
  File "/usr/local/lib/python3.6/dist-packages/sphinx/io.py", line 189, in read_doc
    pub.publish()
  File "/usr/local/lib/python3.6/dist-packages/docutils/core.py", line 218, in publish
    self.settings)
  File "/usr/local/lib/python3.6/dist-packages/sphinx/io.py", line 109, in read
    self.parse()
  File "/usr/local/lib/python3.6/dist-packages/docutils/readers/__init__.py", line 78, in parse
    self.parser.parse(self.input, document)
  File "/usr/local/lib/python3.6/dist-packages/sphinx/parsers.py", line 101, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 171, in run
    input_source=document['source'])
  File "/usr/local/lib/python3.6/dist-packages/docutils/statemachine.py", line 240, in run
    context, state, transitions)
  File "/usr/local/lib/python3.6/dist-packages/docutils/statemachine.py", line 451, in check_line
    return method(match, context, next_state)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 2779, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 395, in new_subsection
    node=section_node, match_titles=True)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 282, in nested_parse
    node=node, match_titles=match_titles)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/usr/local/lib/python3.6/dist-packages/docutils/statemachine.py", line 240, in run
    context, state, transitions)
  File "/usr/local/lib/python3.6/dist-packages/docutils/statemachine.py", line 451, in check_line
    return method(match, context, next_state)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 2779, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 395, in new_subsection
    node=section_node, match_titles=True)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 282, in nested_parse
    node=node, match_titles=match_titles)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/usr/local/lib/python3.6/dist-packages/docutils/statemachine.py", line 240, in run
    context, state, transitions)
  File "/usr/local/lib/python3.6/dist-packages/docutils/statemachine.py", line 451, in check_line
    return method(match, context, next_state)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 2352, in explicit_markup
    nodelist, blank_finish = self.explicit_construct(match)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 2364, in explicit_construct
    return method(self, expmatch)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 2102, in directive
    directive_class, match, type_name, option_presets)
  File "/usr/local/lib/python3.6/dist-packages/docutils/parsers/rst/states.py", line 2151, in run_directive
    result = directive_instance.run()
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/directive.py", line 162, in run
    documenter.generate(more_content=self.content)
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py", line 984, in generate
    self.document_members(all_members)
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py", line 862, in document_members
    check_module=members_check_module and not isattr)
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py", line 948, in generate
    docstrings: List[str] = sum(self.get_doc() or [], [])
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py", line 2657, in get_doc
    return super().get_doc(ignore)
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py", line 2352, in get_doc
    return super().get_doc(ignore)  # type: ignore
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py", line 1876, in get_doc
    return super().get_doc()  # type: ignore
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py", line 2441, in get_doc
    return super().get_doc(ignore)  # type: ignore
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py", line 2496, in get_doc
    return super().get_doc(ignore)  # type: ignore
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py", line 2306, in get_doc
    return super().get_doc(ignore)  # type: ignore
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py", line 1247, in get_doc
    return super().get_doc(ignore)  # type: ignore
  File "/usr/local/lib/python3.6/dist-packages/sphinx/ext/autodoc/__init__.py", line 569, in get_doc
    return [prepare_docstring(docstring, ignore, tab_width)]
  File "/usr/local/lib/python3.6/dist-packages/sphinx/util/docstrings.py", line 79, in prepare_docstring
    content = len(line.lstrip())
AttributeError: 'tuple' object has no attribute 'lstrip'

How to Reproduce

We simply call:

sphinx-build doc html

Expected behavior

The documentation builds

Your project

Sorry, our docs are private

Screenshots

No response

OS

Linux (docker - Ubuntu 18.04)

Python version

3.6.9

Sphinx version

4.3.0

Sphinx extensions

sphinxcontrib-napoleon, sphinx_rtd_theme

Extra tools

No response

Additional context

No response

@tk0miya tk0miya added this to the 4.3.1 milestone Nov 21, 2021
@tk0miya
Copy link
Member

tk0miya commented Nov 21, 2021

I guess this is the same as #9879. Could you confirm #9880 will fix your issue, please?

@testworksau
Copy link
Author

I guess this is the same as #9879. Could you confirm #9880 will fix your issue, please?

Hi @tk0miya - I can confirm that the changes in #9880 allow our documentation to build correctly again, thanks 🎉

@tk0miya
Copy link
Member

tk0miya commented Nov 22, 2021

Thank you for confirmation. Now it's merged into 4.3.x branch. And it will be released as 4.3.1 in a few days. Please wait for a while more.

@tk0miya tk0miya closed this as completed Nov 22, 2021
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Dec 23, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants