readthedocs / sphinx-autoapi

A new approach to API documentation in Sphinx.
https://sphinx-autoapi.readthedocs.io/
MIT License
415 stars 126 forks source link

AttributeError: 'ImportFrom' object has no attribute 'getattr' #372

Closed HexPandaa closed 4 months ago

HexPandaa commented 1 year ago

When using the option show-inheritance-diagram, an exception occurs. I'm using version 2.0.1.

Seems like this is similar to #193 and #289.

Error:

Exception occurred:
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\autoapi\inheritance_diagrams.py", line 14, in _do_import_class
    target = (target.getattr(path_part) or (None,))[0]
AttributeError: 'ImportFrom' object has no attribute 'getattr'
The full traceback has been saved in C:\Users\<REDACTED>\AppData\Local\Temp\sphinx-err-vovz8n1v.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!

Traceback:

# Traceback:
Traceback (most recent call last):
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\cmd\build.py", line 284, in build_main
    app.build(args.force_all, args.filenames)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\application.py", line 347, in build
    self.builder.build_update()
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\builders\__init__.py", line 311, in build_update
    self.build(to_build,
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\builders\__init__.py", line 327, in build
    updated_docnames = set(self.read())
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\builders\__init__.py", line 434, in read
    self._read_serial(docnames)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\builders\__init__.py", line 455, in _read_serial
    self.read_doc(docname)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\builders\__init__.py", line 511, in read_doc
    publisher.publish()
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\core.py", line 217, in publish
    self.document = self.reader.read(self.source, self.parser,
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\io.py", line 105, in read
    self.parse()
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\readers\__init__.py", line 78, in parse
    self.parser.parse(self.input, document)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\parsers.py", line 80, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 170, in run
    results = StateMachineWS.run(self, input_lines, input_offset,
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 240, in run
    context, next_state, result = self.check_line(
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 452, in check_line
    return method(match, context, next_state)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2779, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 393, in new_subsection
    newabsoffset = self.nested_parse(
  File "C:\Users\<REDACTED>\.venv\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\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 240, in run
    context, next_state, result = self.check_line(
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 452, in check_line
    return method(match, context, next_state)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2779, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 393, in new_subsection
    newabsoffset = self.nested_parse(
  File "C:\Users\<REDACTED>\.venv\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\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 240, in run
    context, next_state, result = self.check_line(
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 452, in check_line
    return method(match, context, next_state)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2779, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 393, in new_subsection
    newabsoffset = self.nested_parse(
  File "C:\Users\<REDACTED>\.venv\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\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 240, in run
    context, next_state, result = self.check_line(
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 452, in check_line
    return method(match, context, next_state)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2354, in explicit_markup
    self.explicit_list(blank_finish)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2379, in explicit_list
    newline_offset, blank_finish = self.nested_list_parse(
  File "C:\Users\<REDACTED>\.venv\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\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 240, in run
    context, next_state, result = self.check_line(
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 452, in check_line
    return method(match, context, next_state)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2657, in explicit_markup
    nodelist, blank_finish = self.explicit_construct(match)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2364, in explicit_construct
    return method(self, expmatch)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2101, in directive
    return self.run_directive(
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2151, in run_directive
    result = directive_instance.run()
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\domains\__init__.py", line 286, in run
    return super().run()
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\directives\__init__.py", line 265, in run
    nested_parse_with_titles(self.state, self.content, contentnode)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\util\nodes.py", line 327, in nested_parse_with_titles
    return state.nested_parse(content, 0, node, match_titles=1)
  File "C:\Users\<REDACTED>\.venv\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\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 240, in run
    context, next_state, result = self.check_line(
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\statemachine.py", line 452, in check_line
    return method(match, context, next_state)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2352, in explicit_markup
    nodelist, blank_finish = self.explicit_construct(match)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2364, in explicit_construct
    return method(self, expmatch)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2101, in directive
    return self.run_directive(
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\docutils\parsers\rst\states.py", line 2151, in run_directive
    result = directive_instance.run()
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\autoapi\inheritance_diagrams.py", line 129, in run
    return super().run()
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\ext\inheritance_diagram.py", line 357, in run
    graph = InheritanceGraph(
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\sphinx\ext\inheritance_diagram.py", line 145, in __init__
    classes = self._import_classes(class_names, currmodule)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\autoapi\inheritance_diagrams.py", line 62, in _import_classes
    classes.extend(_import_class(name, currmodule))
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\autoapi\inheritance_diagrams.py", line 31, in _import_class
    target = _do_import_class(name, currmodule)
  File "C:\Users\<REDACTED>\.venv\lib\site-packages\autoapi\inheritance_diagrams.py", line 14, in _do_import_class
    target = (target.getattr(path_part) or (None,))[0]
AttributeError: 'ImportFrom' object has no attribute 'getattr'
AWhetter commented 1 year ago

Please can you provide some example code that can be used to reproduce the error.

AWhetter commented 4 months ago

Closing due to lack of feedback. But if this is still an issue then place let me know and also provide a way to reproduce the problem.