RDFLib / rdflib

RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information.
https://rdflib.readthedocs.org
BSD 3-Clause "New" or "Revised" License
2.15k stars 555 forks source link

supporting sphinx-autodoc-typehints 2.3.x #2912

Open mr-c opened 2 days ago

mr-c commented 2 days ago

Hello, in Debian we already upgraded sphinx-autodoc-typehints to 2.3.0 and cherry-picking https://github.com/RDFLib/rdflib/pull/2852 isn't enough to fix the build.

(we haven't upgraded to sphinx-autdoc-typehints 2.4.x because we are still on Sphinx 7.4.7, not 8.x)

See https://github.com/RDFLib/rdflib/pull/2913 for a PR demonstrating the error

Details

``` reading sources... [ 14%] apidocs/rdflib.extras Traceback (most recent call last): File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/util/typing.py", line 270, in restify elif _is_annotated_form(cls): ^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/util/typing.py", line 195, in _is_annotated_form return typing.get_origin(obj) is Annotated or str(obj).startswith('typing.Annotated') ^^^^^^^^ File "/home/michael/src/rdflib/rdflib/namespace/__init__.py", line 286, in __str__ return str(cls._NS) ^^^^^^^ File "/home/michael/src/rdflib/rdflib/namespace/__init__.py", line 280, in __getattr__ return cls.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/rdflib/namespace/__init__.py", line 258, in __getitem__ raise AttributeError( AttributeError: DefinedNamespace like object has no attribute '_NS' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/util/inspect.py", line 492, in object_description s = repr(obj) ^^^^^^^^^ File "/home/michael/src/rdflib/rdflib/namespace/__init__.py", line 283, in __repr__ return f"Namespace({str(cls._NS)!r})" ^^^^^^^ File "/home/michael/src/rdflib/rdflib/namespace/__init__.py", line 280, in __getattr__ return cls.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/rdflib/namespace/__init__.py", line 258, in __getitem__ raise AttributeError( AttributeError: DefinedNamespace like object has no attribute '_NS' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/util/logging.py", line 266, in pending_warnings yield memhandler File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 318, in build updated_docnames = set(self.read()) ^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 425, in read self._read_serial(docnames) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 477, in _read_serial self.read_doc(docname) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 536, in read_doc publisher.publish() File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/core.py", line 234, in publish self.document = self.reader.read(self.source, self.parser, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/io.py", line 106, in read self.parse() File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/readers/__init__.py", line 76, in parse self.parser.parse(self.input, document) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/parsers.py", line 83, in parse self.statemachine.run(inputlines, document, inliner=self.inliner) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 169, in run results = StateMachineWS.run(self, input_lines, input_offset, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/statemachine.py", line 233, in run context, next_state, result = self.check_line( ^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/statemachine.py", line 445, in check_line return method(match, context, next_state) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2785, in underline self.section(title, source, style, lineno - 1, messages) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 325, in section self.new_subsection(title, lineno, messages) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 391, in new_subsection newabsoffset = self.nested_parse( ^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 279, in nested_parse state_machine.run(block, input_offset, memo=self.memo, File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 195, in run results = StateMachineWS.run(self, input_lines, input_offset) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/statemachine.py", line 233, in run context, next_state, result = self.check_line( ^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/statemachine.py", line 445, in check_line return method(match, context, next_state) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2785, in underline self.section(title, source, style, lineno - 1, messages) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 325, in section self.new_subsection(title, lineno, messages) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 391, in new_subsection newabsoffset = self.nested_parse( ^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 279, in nested_parse state_machine.run(block, input_offset, memo=self.memo, File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 195, in run results = StateMachineWS.run(self, input_lines, input_offset) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/statemachine.py", line 233, in run context, next_state, result = self.check_line( ^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/statemachine.py", line 445, in check_line return method(match, context, next_state) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2355, in explicit_markup nodelist, blank_finish = self.explicit_construct(match) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2367, in explicit_construct return method(self, expmatch) ^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2104, in directive return self.run_directive( ^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/docutils/parsers/rst/states.py", line 2154, in run_directive result = directive_instance.run() ^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/ext/autodoc/directive.py", line 137, in run documenter.generate(more_content=self.content) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/ext/autodoc/__init__.py", line 971, in generate self.document_members(all_members) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/ext/autodoc/__init__.py", line 845, in document_members documenter.generate( File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/ext/autodoc/__init__.py", line 1918, in generate return super().generate(more_content=more_content, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/ext/autodoc/__init__.py", line 961, in generate self.add_directive_header(sig) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/ext/autodoc/__init__.py", line 1739, in add_directive_header base_classes = [restify(cls, "smart") for cls in bases] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/ext/autodoc/__init__.py", line 1739, in base_classes = [restify(cls, "smart") for cls in bases] ^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/util/typing.py", line 366, in restify return inspect.object_description(cls) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/util/inspect.py", line 494, in object_description raise ValueError from exc ValueError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/cmd/build.py", line 337, in build_main app.build(args.force_all, args.filenames) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/application.py", line 378, in build self.builder.build_update() File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 297, in build_update self.build(to_build, File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 317, in build with logging.pending_warnings(): File "/usr/lib/python3.11/contextlib.py", line 158, in __exit__ self.gen.throw(typ, value, traceback) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/util/logging.py", line 273, in pending_warnings memhandler.flushTo(logger) File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/util/logging.py", line 238, in flushTo logger.handle(record) File "/usr/lib/python3.11/logging/__init__.py", line 1644, in handle self.callHandlers(record) File "/usr/lib/python3.11/logging/__init__.py", line 1706, in callHandlers hdlr.handle(record) File "/usr/lib/python3.11/logging/__init__.py", line 974, in handle rv = self.filter(record) ^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/logging/__init__.py", line 830, in filter result = f.filter(record) ^^^^^^^^^^^^^^^^ File "/home/michael/src/rdflib/.tox/docs/lib/python3.11/site-packages/sphinx/util/logging.py", line 473, in filter raise exc sphinx.errors.SphinxWarning: Cannot resolve forward reference in type annotations of "rdflib.query.Result.__iter__": name '_SubjectType' is not defined Warning, treated as error: Cannot resolve forward reference in type annotations of "rdflib.query.Result.__iter__": name '_SubjectType' is not defined ```

mr-c commented 2 days ago

Any help in fixing this would be appreciated!