#1151833 sphinx-substitution-extensions: FTBFS: E ImportError: cannot import name 'no_type_check_decorator' from 'typing' (/usr/lib/python3.15/typing.py)

#1151833#5
Date:
2026-10-23 16:45:08 UTC
From:
To:
Dear maintainer:

During a rebuild of all packages in unstable, this package failed to build.

Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:

https://people.debian.org/~sanvila/build-logs/202610/

About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.

If you cannot reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.

If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:sphinx-substitution-extensions, so that this is still
visible in the BTS web page for this package.

Thanks.
--------------------------------------------------------------------------------
[...]
    from beartype._util.text.utiltextversion import (
/usr/lib/python3/dist-packages/beartype/_util/text/utiltextversion.py:15: in <module>
    from beartype.typing import Tuple
/usr/lib/python3/dist-packages/beartype/typing/__init__.py:183: in <module>
    from typing import (
E   ImportError: cannot import name 'no_type_check_decorator' from 'typing' (/usr/lib/python3.15/typing.py)
=========================== short test summary info ============================
ERROR tests/test_equivalence_cases.py
ERROR tests/test_substitution_extensions.py
!!!!!!!!!!!!!!!!!!! Interrupted: 2 errors during collection !!!!!!!!!!!!!!!!!!!!
============================== 2 errors in 0.11s ===============================
E: pybuild pybuild:485: test: plugin pyproject failed with: exit code=2: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.15_sphinx-substitution-extensions/build; python3.15 -m pytest tests
I: pybuild base:383: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14_sphinx-substitution-extensions/build; python3.14 -m pytest tests
============================= test session starts ==============================
platform linux -- Python 3.14.8, pytest-9.1.1, pluggy-1.6.0
rootdir: /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14_sphinx-substitution-extensions/build
configfile: pyproject.toml
collected 85 items

tests/test_equivalence_cases.py::test_equivalent_builds[custom_myst_sub_delimiters_code_block] PASSED [  1%]
tests/test_equivalence_cases.py::test_equivalent_builds[default_myst_sub_delimiters_code_block] PASSED [  2%]
tests/test_equivalence_cases.py::test_equivalent_builds[default_substitution_include_content] PASSED [  3%]
tests/test_equivalence_cases.py::test_equivalent_builds[default_substitution_include_disabled_content] PASSED [  4%]
tests/test_equivalence_cases.py::test_equivalent_builds[default_substitutions_disabled_with_flag] PASSED [  5%]
tests/test_equivalence_cases.py::test_equivalent_builds[default_substitutions_enabled] PASSED [  7%]
tests/test_equivalence_cases.py::test_equivalent_builds[default_substitutions_image_disabled_path] PASSED [  8%]
tests/test_equivalence_cases.py::test_equivalent_builds[default_substitutions_image_path] PASSED [  9%]
tests/test_equivalence_cases.py::test_equivalent_builds[default_substitutions_literal_include_content] PASSED [ 10%]
tests/test_equivalence_cases.py::test_equivalent_builds[default_substitutions_literal_include_disabled_content] PASSED [ 11%]
tests/test_equivalence_cases.py::test_equivalent_builds[default_substitutions_literal_include_disabled_path] PASSED [ 12%]
tests/test_equivalence_cases.py::test_equivalent_builds[default_substitutions_literal_include_path] PASSED [ 14%]
tests/test_equivalence_cases.py::test_equivalent_builds[include_path_is_relative_to_source_directory[literal]] PASSED [ 15%]
tests/test_equivalence_cases.py::test_equivalent_builds[include_path_is_relative_to_source_directory[substitution]] PASSED [ 16%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_deep_nesting] PASSED [ 17%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_empty_containers] PASSED [ 18%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_frontmatter_substitutions] PASSED [ 20%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_mixed_types_in_list] PASSED [ 21%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_nested_lists] PASSED [ 22%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_nested_substitutions] PASSED [ 23%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_nested_substitutions_with_lists] PASSED [ 24%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_substitution_code_role] PASSED [ 25%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_substitution_download] PASSED [ 27%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_substitution_hyperlink_target] PASSED [ 28%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_substitutions] PASSED [ 29%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_substitutions_custom_markdown_suffix] PASSED [ 30%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_substitutions_ignored_given_rst_definition] PASSED [ 31%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_substitutions_ignored_without_rst_definition] PASSED [ 32%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_substitutions_image] PASSED [ 34%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_substitutions_image_default_delimiters] PASSED [ 35%]
tests/test_equivalence_cases.py::test_equivalent_builds[myst_substitutions_not_enabled] PASSED [ 36%]
tests/test_equivalence_cases.py::test_equivalent_builds[no_substitution_code_block] PASSED [ 37%]
tests/test_equivalence_cases.py::test_equivalent_builds[no_substitution_hyperlink_target] PASSED [ 38%]
tests/test_equivalence_cases.py::test_equivalent_builds[no_substitution_image] PASSED [ 40%]
tests/test_equivalence_cases.py::test_equivalent_builds[no_substitution_literal_include] PASSED [ 41%]
tests/test_equivalence_cases.py::test_equivalent_builds[rst_substitution_key_with_dot_does_not_raise_error] PASSED [ 42%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_code_block] PASSED [ 43%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_code_block_case_preserving] PASSED [ 44%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_download] PASSED [ 45%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_hyperlink_target] PASSED [ 47%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_image_path] PASSED [ 48%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_image_path_multiple] PASSED [ 49%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_image_with_options] PASSED [ 50%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_include_content] PASSED [ 51%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_include_content_does_not_leak_to_nested_includes] PASSED [ 52%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_include_literal_content] PASSED [ 54%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_include_literal_content_with_include_read] PASSED [ 55%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_include_code_content_with_include_read] PASSED [ 56%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_include_parser_content_with_include_read] PASSED [ 57%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_parser_include_with_nested_include_read] PASSED [ 58%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_include_path_and_content] PASSED [ 60%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_inline] PASSED [ 61%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_inline_case_preserving] PASSED [ 62%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_literal_include] PASSED [ 63%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_literal_include_both_path_and_content] PASSED [ 64%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_literal_include_empty_file] PASSED [ 65%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_literal_include_multiple] PASSED [ 67%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_literal_include_path] PASSED [ 68%]
tests/test_equivalence_cases.py::test_equivalent_builds[substitution_literal_include_with_caption] PASSED [ 69%]
tests/test_equivalence_cases.py::test_equivalent_builds[xref_role_class_prefix_removal] PASSED [ 70%]
tests/test_equivalence_cases.py::test_invalid_manifest[schema-version] PASSED [ 71%]
tests/test_equivalence_cases.py::test_invalid_manifest[cases-type] PASSED [ 72%]
tests/test_equivalence_cases.py::test_invalid_manifest[unknown-root-key] PASSED [ 74%]
tests/test_equivalence_cases.py::test_invalid_manifest[case-type] PASSED [ 75%]
tests/test_equivalence_cases.py::test_invalid_manifest[case-id-type] PASSED [ 76%]
tests/test_equivalence_cases.py::test_invalid_manifest[files-type] PASSED [ 77%]
tests/test_equivalence_cases.py::test_invalid_manifest[file-content-type] PASSED [ 78%]
tests/test_equivalence_cases.py::test_invalid_manifest[warning-setting-type] PASSED [ 80%]
tests/test_equivalence_cases.py::test_invalid_manifest[unknown-case-key] PASSED [ 81%]
tests/test_equivalence_cases.py::test_invalid_manifest[duplicate-case-id] PASSED [ 82%]
tests/test_equivalence_cases.py::test_destination_rejects_unsafe_path[/escape] PASSED [ 83%]
tests/test_equivalence_cases.py::test_destination_rejects_unsafe_path[../escape] PASSED [ 84%]
tests/test_equivalence_cases.py::test_write_build_rejects_overlapping_files PASSED [ 85%]
tests/test_myst.py::test_myst_invalid_substitution_access PASSED         [ 87%]
tests/test_myst.py::test_myst_substitution_key_with_dot_raises_error PASSED [ 88%]
tests/test_myst.py::test_myst_nested_substitution_key_with_dot_raises_error PASSED [ 89%]
tests/test_substitution_extensions.py::test_setup PASSED                 [ 90%]
tests/test_substitution_extensions.py::test_substitution_literal_include_in_rest_example PASSED [ 91%]
tests/test_substitution_extensions.py::test_no_substitution_include PASSED [ 92%]
tests/test_substitution_extensions.py::test_include_fragment_is_not_reported_as_unreferenced PASSED [ 94%]
tests/test_substitution_extensions.py::test_include_without_sphinx_environment PASSED [ 95%]
tests/test_substitution_extensions.py::test_substitution_include_path PASSED [ 96%]
tests/test_substitution_extensions.py::test_include_read_event_with_content_substitutions PASSED [ 97%]
tests/test_substitution_extensions.py::test_default_substitution_include_path PASSED [ 98%]
tests/test_substitution_extensions.py::test_default_substitution_include_disabled PASSED [100%]

=============================== warnings summary ===============================
tests/test_substitution_extensions.py::test_default_substitution_include_disabled
  /usr/lib/python3/dist-packages/myst_parser/mocking.py:421: RemovedInSphinx11Warning: 'sphinx.environment.BuildEnvironment.app' is deprecated. Check CHANGES for Sphinx API modifications.
    self.renderer.sphinx_env.app.events.emit(

#1151833#18
Date:
2026-10-27 15:04:12 UTC
From:
To: