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

fix: handle exception from autodoc for classes with __slots__ #124

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

Object905
Copy link

Hi. When __slots__ are added to class returned from sphinx_accessor I've got an exception from autodoc.

autodoc is trying to handle parent in MethodDocumenter as class object, but i'ts actually may be an instance when this library is used, but it expects parent to be class object, which always have __dict__, while instance with __slots__ does not have __dict__

Faced this issue in pola-rs/polars#13236

Exception
(Error in parallel process)
Traceback (most recent call last):
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/sphinx/util/parallel.py", line 76, in _process
    ret = func(arg)
          ^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 459, in read_process
    self.read_doc(docname, _cache=False)
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 498, in read_doc
    publisher.publish()
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/core.py", line 217, in publish
    self.document = self.reader.read(self.source, self.parser,
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/sphinx/io.py", line 105, in read
    self.parse()
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/readers/__init__.py", line 78, in parse
    self.parser.parse(self.input, document)
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/sphinx/parsers.py", line 81, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 170, in run
    results = StateMachineWS.run(self, input_lines, input_offset,
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/statemachine.py", line 240, in run
    context, next_state, result = self.check_line(
                                  ^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/statemachine.py", line 452, in check_line
    return method(match, context, next_state)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 3018, in text
    self.section(title.lstrip(), source, style, lineno + 1, messages)
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 393, in new_subsection
    newabsoffset = self.nested_parse(
                   ^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 281, in nested_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/statemachine.py", line 240, in run
    context, next_state, result = self.check_line(
                                  ^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/statemachine.py", line 452, in check_line
    return method(match, context, next_state)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2354, in explicit_markup
    self.explicit_list(blank_finish)
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2379, in explicit_list
    newline_offset, blank_finish = self.nested_list_parse(
                                   ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 318, in nested_list_parse
    state_machine.run(block, input_offset, memo=self.memo,
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/statemachine.py", line 240, in run
    context, next_state, result = self.check_line(
                                  ^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/statemachine.py", line 452, in check_line
    return method(match, context, next_state)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2657, in explicit_markup
    nodelist, blank_finish = self.explicit_construct(match)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2364, in explicit_construct
    return method(self, expmatch)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2101, in directive
    return self.run_directive(
           ^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2151, in run_directive
    result = directive_instance.run()
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/sphinx/ext/autosummary/__init__.py", line 233, in run
    items = self.get_items(names)
            ^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/sphinx/ext/autosummary/__init__.py", line 341, in get_items
    if not documenter.import_object():
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/obj/Dev/polars/.venv/lib/python3.11/site-packages/sphinx/ext/autodoc/__init__.py", line 2144, in import_object
    obj = self.parent.__dict__.get(self.object_name)
          ^^^^^^^^^^^^^^^^^^^^
AttributeError: 'ArrayNameSpace' object has no attribute '__dict__'

Sphinx parallel build error:
AttributeError: 'ArrayNameSpace' object has no attribute '__dict__'
make: *** [Makefile:27: html] Error 2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant