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

MyST crashes without error message (breathe extension) #322

Open
arwedus opened this issue Mar 2, 2021 · 6 comments · Fixed by breathe-doc/breathe#780
Open

MyST crashes without error message (breathe extension) #322

arwedus opened this issue Mar 2, 2021 · 6 comments · Fixed by breathe-doc/breathe#780
Labels
bug Something isn't working

Comments

@arwedus
Copy link

arwedus commented Mar 2, 2021

Describe the bug

MyST crashes without error message if "directive_class" is not a class.

To Reproduce

Cannot reproduce, because the error message does not mention the problematic file and the document is confidential.

Expected behavior

MyST should catch the issue that something passed to run_directive is not a known directive class.

Environment

  • OS: Ubuntu 18.04
  • Sphinx version: 3.5.1
  • Python version: 3.6.9 (CPython)
  • Docutils version: 0.16 release
  • Jinja2 version: 2.11.3

Additional context

full trace log:

#   
# Loaded extensions:
#   sphinx.ext.mathjax (3.5.1) from /home/username/.local/lib/python3.6/site-packages/sphinx/ext/mathjax.py
#   sphinxcontrib.applehelp (1.0.2) from /home/username/.local/lib/python3.6/site-packages/sphinxcontrib/applehelp/__init__.py
#   sphinxcontrib.devhelp (1.0.2) from /home/username/.local/lib/python3.6/site-packages/sphinxcontrib/devhelp/__init__.py
#   sphinxcontrib.htmlhelp (1.0.3) from /home/username/.local/lib/python3.6/site-packages/sphinxcontrib/htmlhelp/__init__.py
#   sphinxcontrib.serializinghtml (1.1.4) from /home/username/.local/lib/python3.6/site-packages/sphinxcontrib/serializinghtml/__init__.py
#   sphinxcontrib.qthelp (1.0.3) from /home/username/.local/lib/python3.6/site-packages/sphinxcontrib/qthelp/__init__.py
#   alabaster (0.7.12) from /home/username/.local/lib/python3.6/site-packages/alabaster/__init__.py
#   breathe (4.27.0) from /home/username/.local/lib/python3.6/site-packages/breathe/__init__.py
#   sphinx.ext.autodoc.type_comment (3.5.1) from /home/username/.local/lib/python3.6/site-packages/sphinx/ext/autodoc/type_comment.py
#   sphinx.ext.autodoc (3.5.1) from /home/username/.local/lib/python3.6/site-packages/sphinx/ext/autodoc/__init__.py
#   sphinx.ext.doctest (3.5.1) from /home/username/.local/lib/python3.6/site-packages/sphinx/ext/doctest.py
#   sphinx.ext.todo (3.5.1) from /home/username/.local/lib/python3.6/site-packages/sphinx/ext/todo.py
#   sphinx.ext.ifconfig (3.5.1) from /home/username/.local/lib/python3.6/site-packages/sphinx/ext/ifconfig.py
#   sphinx.ext.viewcode (3.5.1) from /home/username/.local/lib/python3.6/site-packages/sphinx/ext/viewcode.py
#   sphinx.ext.extlinks (3.5.1) from /home/username/.local/lib/python3.6/site-packages/sphinx/ext/extlinks.py
#   sphinx_markdown_tables (<module 'sphinx_markdown_tables.__version__' from '/usr/local/lib/python3.6/dist-packages/sphinx_markdown_tables/__version__.py'>) from /usr/local/lib/python3.6/dist-packages/sphinx_markdown_tables/__init__.py
#   sphinxcontrib.confluencebuilder (1.4.0) from /home/username/.local/lib/python3.6/site-packages/sphinxcontrib/confluencebuilder/__init__.py
#   sphinxcontrib.plantuml (unknown version) from /usr/local/lib/python3.6/dist-packages/sphinxcontrib/plantuml.py
#   myst_parser (0.13.5) from /home/username/.local/lib/python3.6/site-packages/myst_parser/__init__.py
#   sphinx_git (unknown version) from /usr/local/lib/python3.6/dist-packages/sphinx_git/__init__.py
#   sphinx_rtd_theme (unknown version) from /usr/local/lib/python3.6/dist-packages/sphinx_rtd_theme/__init__.py
Traceback (most recent call last):
  File "/home/username/.local/lib/python3.6/site-packages/sphinx/cmd/build.py", line 280, in build_main
    app.build(args.force_all, filenames)
  File "/home/username/.local/lib/python3.6/site-packages/sphinx/application.py", line 352, in build
    self.builder.build_update()
  File "/home/username/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 298, in build_update
    len(to_build))
  File "/home/username/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 310, in build
    updated_docnames = set(self.read())
  File "/home/username/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 417, in read
    self._read_serial(docnames)
  File "/home/username/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 438, in _read_serial
    self.read_doc(docname)
  File "/home/username/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 478, in read_doc
    doctree = read_doc(self.app, self.env, self.env.doc2path(docname))
  File "/home/username/.local/lib/python3.6/site-packages/sphinx/io.py", line 221, in read_doc
    pub.publish()
  File "/home/username/.local/lib/python3.6/site-packages/docutils/core.py", line 218, in publish
    self.settings)
  File "/home/username/.local/lib/python3.6/site-packages/sphinx/io.py", line 126, in read
    self.parse()
  File "/home/username/.local/lib/python3.6/site-packages/docutils/readers/__init__.py", line 77, in parse
    self.parser.parse(self.input, document)
  File "/home/username/.local/lib/python3.6/site-packages/myst_parser/sphinx_parser.py", line 195, in parse
    parser.renderer.render(tokens, parser.options, env)
  File "/home/username/.local/lib/python3.6/site-packages/myst_parser/docutils_renderer.py", line 174, in render
    self.rules[f"render_{nest_token.type}"](nest_token)
  File "/home/username/.local/lib/python3.6/site-packages/myst_parser/docutils_renderer.py", line 449, in render_fence
    return self.render_directive(token)
  File "/home/username/.local/lib/python3.6/site-packages/myst_parser/docutils_renderer.py", line 939, in render_directive
    nodes_list = self.run_directive(name, arguments, content, position)
  File "/home/username/.local/lib/python3.6/site-packages/myst_parser/docutils_renderer.py", line 970, in run_directive
    if issubclass(directive_class, Include):
TypeError: issubclass() arg 1 must be a class
@arwedus arwedus added the bug Something isn't working label Mar 2, 2021
@arwedus
Copy link
Author

arwedus commented Mar 2, 2021

it actually helped to just put a try ... except around the if-clause in docutils_renderer.py, line 970.

@chrisjsewell
Copy link
Member

heya, hmm yes it seems that one of your sphinx extensions is using app.add_directive('name', Directive) and adding a directive that is not a class, which seems weird.

I can certainly add a try/except,
but also out of interest could you try adding this try/except locally and print out what directive it is?

@chrisjsewell
Copy link
Member

At a guess this something to do with the way breathe handles directive registration: https://github.com/michaeljones/breathe/blob/4ce8c7a0d79f79f0ae3e7c7fbaa9c4fbb5c84888/breathe/directives.py#L564-L573

@arwedus
Copy link
Author

arwedus commented Mar 2, 2021

I'll set up a mini sphinx+breathe+MyST example later, I guess that's what happens here. See also my related issue. I put a try... execpt around the line 970 locally, and since then I've been seing the doxygenstruct related error messages.

@jakobandersen
Copy link

@arwedus, from the Breathe side it would be great with a small example to reproduce. The directive registration indeed seems iffy, so feel free to open an issue over at Breathe (or point me to an existing one if I missed it).

@jakobandersen
Copy link

This should be fixed in the next Breathe release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants