sphinx-autodoc-typehints: FTBFS against python 3.15rc1

Maximiliano Curia <[email protected]>
Newsgroups gmane.linux.debian.devel.python
Message-ID <[email protected]>
Package: src:sphinx-autodoc-typehints
Version: 3.12.0-1
User: [email protected]
Usertags: python3.15
Tags: patch, ftbfs, forky, sid

Hi!

While rebuilding the python related packages against the Python 3.15rc1
version we found that sphinx-autodoc-typehints fails to build from
source [1]. 

The issue was already fixed and applied upstream [2].

I applied the upstream fix in the sandbox [3] to be able to build the
packages that depend on sphinx-autodoc-typehints, please consider
applying the patch to support the upcoming 3.15 version.

Happy hacking,

[1]: https://debusine.debian.net/debian/r-python-python3.15/work-request/1091110/
[2]: https://github.com/tox-dev/sphinx-autodoc-typehints/commit/543af34d43f6457e824ccf09eb03fb7a45b99230
[3]: https://debusine.debian.net/debian/r-python-python3.15/

-- 
"Can you imagine what I would do if I could do all I can?" -- Sun Tzu
Saludos /\/\ /\ >< `/
fix-annotations-use_py_class_for_types_on_313.patch (text/x-diff, 3.7 KB)
commit 543af34d43f6457e824ccf09eb03fb7a45b99230
Author: Bernát Gábor <[email protected]>
Date:   Wed Jul 15 08:42:49 2026 -0700

    🐛 fix(annotations): use py:class for types on 3.13+ (#732)
    
    The `inv` test fixture cross-checks every emitted cross-reference role
    against the live `docs.python.org/<ver>/objects.inv`. Python 3.13
    reclassified the entire `types` module from `:py:data:` to `:py:class:`
    (3.12 still uses `:py:data:`), so the `:py:data:` references we emit for
    `types.FunctionType`, `types.FrameType`, and the rest no longer resolve
    on 3.13+, and `test_format_annotation[FunctionType]`/`[FrameType]` fail
    on 3.13/3.14.
    
    The file already gated `EllipsisType`/`NotImplementedType` this way.
    This extends the gate to the whole `types.*` set: populated on 3.12 and
    below, empty from 3.13 on, so `format_annotation` emits `:py:class:`
    there to match the docs. Updated the two hardcoded test expectations to
    the same version conditional already used for `EllipsisType`.
    
    Verified against the live 3.12/3.13/3.14 inventories: all `types.*`
    names are `data` on 3.12 and `class` on 3.13 and 3.14.

diff --git a/src/sphinx_autodoc_typehints/_annotations.py b/src/sphinx_autodoc_typehints/_annotations.py
index 8f6e9f1..66b1438 100644
--- a/src/sphinx_autodoc_typehints/_annotations.py
+++ b/src/sphinx_autodoc_typehints/_annotations.py
@@ -38,18 +38,20 @@ _PYDATA_ANNOTS_TYPING = {
     "Tuple",
     *({"Union"} if sys.version_info < (3, 14) else set()),
 }
-_PYDATA_ANNOTS_TYPES = {
-    *("AsyncGeneratorType", "BuiltinFunctionType", "BuiltinMethodType"),
-    *("CellType", "ClassMethodDescriptorType", "CoroutineType"),
-    *("FrameType", "FunctionType"),
-    *("GeneratorType", "GetSetDescriptorType"),
-    "LambdaType",
-    *("MemberDescriptorType", "MethodDescriptorType", "MethodType", "MethodWrapperType"),
-    "NoneType",
-    "WrapperDescriptorType",
-    # documented as ``py:class`` since the Python 3.13 docs
-    *({"EllipsisType", "NotImplementedType"} if sys.version_info < (3, 13) else set()),
-}
+# The types module documents these as ``py:data`` through 3.12 and as ``py:class`` from 3.13 on.
+_PYDATA_ANNOTS_TYPES = (
+    {
+        *("AsyncGeneratorType", "BuiltinFunctionType", "BuiltinMethodType"),
+        *("CellType", "ClassMethodDescriptorType", "CoroutineType"),
+        *("EllipsisType", "FrameType", "FunctionType"),
+        *("GeneratorType", "GetSetDescriptorType"),
+        "LambdaType",
+        *("MemberDescriptorType", "MethodDescriptorType", "MethodType", "MethodWrapperType"),
+        *("NoneType", "NotImplementedType", "WrapperDescriptorType"),
+    }
+    if sys.version_info < (3, 13)
+    else set()
+)
 _PYDATA_ANNOTATIONS = {
     *(("typing", n) for n in _PYDATA_ANNOTS_TYPING),
     *(("types", n) for n in _PYDATA_ANNOTS_TYPES),
diff --git a/tests/test_annotations.py b/tests/test_annotations.py
index e6fe86b..6250cb8 100644
--- a/tests/test_annotations.py
+++ b/tests/test_annotations.py
@@ -167,8 +167,16 @@ _CASES = [
         f":py:{'class' if sys.version_info >= (3, 13) else 'data'}:`~types.EllipsisType`",
         id="EllipsisType",
     ),
-    pytest.param(FunctionType, ":py:data:`~types.FunctionType`", id="FunctionType"),
-    pytest.param(FrameType, ":py:data:`~types.FrameType`", id="FrameType"),
+    pytest.param(
+        FunctionType,
+        f":py:{'class' if sys.version_info >= (3, 13) else 'data'}:`~types.FunctionType`",
+        id="FunctionType",
+    ),
+    pytest.param(
+        FrameType,
+        f":py:{'class' if sys.version_info >= (3, 13) else 'data'}:`~types.FrameType`",
+        id="FrameType",
+    ),
     pytest.param(ModuleType, ":py:class:`~types.ModuleType`", id="ModuleType"),
     pytest.param(
         NotImplementedType,
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.