[Pkg-matrix-maintainers] Bug#1115765: python-matrix-nio: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13

Lucas Nussbaum lucas at debian.org
Fri Sep 19 20:32:40 BST 2025


Source: python-matrix-nio
Version: 0.25.2-1
Severity: serious
Justification: FTBFS
Tags: forky sid ftbfs
User: lucas at debian.org
Usertags: ftbfs-20250919 ftbfs-forky

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.

The full build log is available from:
http://qa-logs.debian.net/2025/09/19/python-matrix-nio_0.25.2-1_unstable.log

All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20250919;users=lucas@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20250919&fusertaguser=lucas@debian.org&allbugs=1&cseverity=1&ctags=1&caffected=1#results

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please mark it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with mine
so that we can identify if something relevant changed in the meantime.

-- 
Relevant part of the build log (hopefully):
>  debian/rules binary
> dh binary --buildsystem=pybuild
>    dh_update_autotools_config -O--buildsystem=pybuild
>    dh_autoreconf -O--buildsystem=pybuild
>    dh_auto_configure -O--buildsystem=pybuild
>    dh_auto_build -O--buildsystem=pybuild
> I: pybuild plugin_pyproject:129: Building wheel for python3.13 with "build" module
> I: pybuild base:311: python3.13 -m build --skip-dependency-check --no-isolation --wheel --outdir /build/reproducible-path/python-matrix-nio-0.25.2/.pybuild/cpython3_3.13  
> * Building wheel...
> /usr/lib/python3/dist-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated
> !!
> 
>         ********************************************************************************
>         Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).
> 
>         By 2026-Feb-18, you need to update your project and remove deprecated calls
>         or your builds will no longer be supported.
> 
>         See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
>         ********************************************************************************
> 
> !!
>   corresp(dist, value, root_dir)
> running bdist_wheel
> running build
> running build_py
> creating build/lib/nio
> copying src/nio/__init__.py -> build/lib/nio
> copying src/nio/http.py -> build/lib/nio
> copying src/nio/responses.py -> build/lib/nio
> copying src/nio/monitors.py -> build/lib/nio
> copying src/nio/api.py -> build/lib/nio
> copying src/nio/rooms.py -> build/lib/nio
> copying src/nio/_compat.py -> build/lib/nio
> copying src/nio/schemas.py -> build/lib/nio
> copying src/nio/exceptions.py -> build/lib/nio
> creating build/lib/nio/client
> copying src/nio/client/__init__.py -> build/lib/nio/client
> copying src/nio/client/http_client.py -> build/lib/nio/client
> copying src/nio/client/base_client.py -> build/lib/nio/client
> copying src/nio/client/async_client.py -> build/lib/nio/client
> creating build/lib/nio/crypto
> copying src/nio/crypto/__init__.py -> build/lib/nio/crypto
> copying src/nio/crypto/device.py -> build/lib/nio/crypto
> copying src/nio/crypto/sessions.py -> build/lib/nio/crypto
> copying src/nio/crypto/key_request.py -> build/lib/nio/crypto
> copying src/nio/crypto/log.py -> build/lib/nio/crypto
> copying src/nio/crypto/sas.py -> build/lib/nio/crypto
> copying src/nio/crypto/olm_machine.py -> build/lib/nio/crypto
> copying src/nio/crypto/async_attachments.py -> build/lib/nio/crypto
> copying src/nio/crypto/key_export.py -> build/lib/nio/crypto
> copying src/nio/crypto/attachments.py -> build/lib/nio/crypto
> copying src/nio/crypto/memorystores.py -> build/lib/nio/crypto
> creating build/lib/nio/event_builders
> copying src/nio/event_builders/__init__.py -> build/lib/nio/event_builders
> copying src/nio/event_builders/event_builder.py -> build/lib/nio/event_builders
> copying src/nio/event_builders/direct_messages.py -> build/lib/nio/event_builders
> copying src/nio/event_builders/state_events.py -> build/lib/nio/event_builders
> creating build/lib/nio/events
> copying src/nio/events/__init__.py -> build/lib/nio/events
> copying src/nio/events/common.py -> build/lib/nio/events
> copying src/nio/events/room_events.py -> build/lib/nio/events
> copying src/nio/events/presence.py -> build/lib/nio/events
> copying src/nio/events/misc.py -> build/lib/nio/events
> copying src/nio/events/invite_events.py -> build/lib/nio/events
> copying src/nio/events/to_device.py -> build/lib/nio/events
> copying src/nio/events/ephemeral.py -> build/lib/nio/events
> copying src/nio/events/account_data.py -> build/lib/nio/events
> creating build/lib/nio/store
> copying src/nio/store/__init__.py -> build/lib/nio/store
> copying src/nio/store/models.py -> build/lib/nio/store
> copying src/nio/store/file_trustdb.py -> build/lib/nio/store
> copying src/nio/store/log.py -> build/lib/nio/store
> copying src/nio/store/database.py -> build/lib/nio/store
> running egg_info
> creating src/matrix_nio.egg-info
> writing src/matrix_nio.egg-info/PKG-INFO
> writing dependency_links to src/matrix_nio.egg-info/dependency_links.txt
> writing requirements to src/matrix_nio.egg-info/requires.txt
> writing top-level names to src/matrix_nio.egg-info/top_level.txt
> writing manifest file 'src/matrix_nio.egg-info/SOURCES.txt'
> reading manifest file 'src/matrix_nio.egg-info/SOURCES.txt'
> reading manifest template 'MANIFEST.in'
> adding license file 'LICENSE.md'
> writing manifest file 'src/matrix_nio.egg-info/SOURCES.txt'
> installing to build/bdist.linux-x86_64/wheel
> running install
> running install_lib
> creating build/bdist.linux-x86_64/wheel
> creating build/bdist.linux-x86_64/wheel/nio
> creating build/bdist.linux-x86_64/wheel/nio/client
> copying build/lib/nio/client/__init__.py -> build/bdist.linux-x86_64/wheel/./nio/client
> copying build/lib/nio/client/http_client.py -> build/bdist.linux-x86_64/wheel/./nio/client
> copying build/lib/nio/client/base_client.py -> build/bdist.linux-x86_64/wheel/./nio/client
> copying build/lib/nio/client/async_client.py -> build/bdist.linux-x86_64/wheel/./nio/client
> copying build/lib/nio/__init__.py -> build/bdist.linux-x86_64/wheel/./nio
> copying build/lib/nio/http.py -> build/bdist.linux-x86_64/wheel/./nio
> creating build/bdist.linux-x86_64/wheel/nio/crypto
> copying build/lib/nio/crypto/__init__.py -> build/bdist.linux-x86_64/wheel/./nio/crypto
> copying build/lib/nio/crypto/device.py -> build/bdist.linux-x86_64/wheel/./nio/crypto
> copying build/lib/nio/crypto/sessions.py -> build/bdist.linux-x86_64/wheel/./nio/crypto
> copying build/lib/nio/crypto/key_request.py -> build/bdist.linux-x86_64/wheel/./nio/crypto
> copying build/lib/nio/crypto/log.py -> build/bdist.linux-x86_64/wheel/./nio/crypto
> copying build/lib/nio/crypto/sas.py -> build/bdist.linux-x86_64/wheel/./nio/crypto
> copying build/lib/nio/crypto/olm_machine.py -> build/bdist.linux-x86_64/wheel/./nio/crypto
> copying build/lib/nio/crypto/async_attachments.py -> build/bdist.linux-x86_64/wheel/./nio/crypto
> copying build/lib/nio/crypto/key_export.py -> build/bdist.linux-x86_64/wheel/./nio/crypto
> copying build/lib/nio/crypto/attachments.py -> build/bdist.linux-x86_64/wheel/./nio/crypto
> copying build/lib/nio/crypto/memorystores.py -> build/bdist.linux-x86_64/wheel/./nio/crypto
> copying build/lib/nio/responses.py -> build/bdist.linux-x86_64/wheel/./nio
> copying build/lib/nio/monitors.py -> build/bdist.linux-x86_64/wheel/./nio
> copying build/lib/nio/api.py -> build/bdist.linux-x86_64/wheel/./nio
> creating build/bdist.linux-x86_64/wheel/nio/event_builders
> copying build/lib/nio/event_builders/__init__.py -> build/bdist.linux-x86_64/wheel/./nio/event_builders
> copying build/lib/nio/event_builders/event_builder.py -> build/bdist.linux-x86_64/wheel/./nio/event_builders
> copying build/lib/nio/event_builders/direct_messages.py -> build/bdist.linux-x86_64/wheel/./nio/event_builders
> copying build/lib/nio/event_builders/state_events.py -> build/bdist.linux-x86_64/wheel/./nio/event_builders
> copying build/lib/nio/rooms.py -> build/bdist.linux-x86_64/wheel/./nio
> creating build/bdist.linux-x86_64/wheel/nio/events
> copying build/lib/nio/events/__init__.py -> build/bdist.linux-x86_64/wheel/./nio/events
> copying build/lib/nio/events/common.py -> build/bdist.linux-x86_64/wheel/./nio/events
> copying build/lib/nio/events/room_events.py -> build/bdist.linux-x86_64/wheel/./nio/events
> copying build/lib/nio/events/presence.py -> build/bdist.linux-x86_64/wheel/./nio/events
> copying build/lib/nio/events/misc.py -> build/bdist.linux-x86_64/wheel/./nio/events
> copying build/lib/nio/events/invite_events.py -> build/bdist.linux-x86_64/wheel/./nio/events
> copying build/lib/nio/events/to_device.py -> build/bdist.linux-x86_64/wheel/./nio/events
> copying build/lib/nio/events/ephemeral.py -> build/bdist.linux-x86_64/wheel/./nio/events
> copying build/lib/nio/events/account_data.py -> build/bdist.linux-x86_64/wheel/./nio/events
> copying build/lib/nio/_compat.py -> build/bdist.linux-x86_64/wheel/./nio
> copying build/lib/nio/schemas.py -> build/bdist.linux-x86_64/wheel/./nio
> copying build/lib/nio/exceptions.py -> build/bdist.linux-x86_64/wheel/./nio
> creating build/bdist.linux-x86_64/wheel/nio/store
> copying build/lib/nio/store/__init__.py -> build/bdist.linux-x86_64/wheel/./nio/store
> copying build/lib/nio/store/models.py -> build/bdist.linux-x86_64/wheel/./nio/store
> copying build/lib/nio/store/file_trustdb.py -> build/bdist.linux-x86_64/wheel/./nio/store
> copying build/lib/nio/store/log.py -> build/bdist.linux-x86_64/wheel/./nio/store
> copying build/lib/nio/store/database.py -> build/bdist.linux-x86_64/wheel/./nio/store
> running install_egg_info
> Copying src/matrix_nio.egg-info to build/bdist.linux-x86_64/wheel/./matrix_nio-0.25.2.egg-info
> running install_scripts
> creating build/bdist.linux-x86_64/wheel/matrix_nio-0.25.2.dist-info/WHEEL
> creating '/build/reproducible-path/python-matrix-nio-0.25.2/.pybuild/cpython3_3.13/.tmp-gtfw60vt/matrix_nio-0.25.2-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
> adding 'matrix_nio-0.25.2.dist-info/licenses/LICENSE.md'
> adding 'nio/__init__.py'
> adding 'nio/_compat.py'
> adding 'nio/api.py'
> adding 'nio/exceptions.py'
> adding 'nio/http.py'
> adding 'nio/monitors.py'
> adding 'nio/responses.py'
> adding 'nio/rooms.py'
> adding 'nio/schemas.py'
> adding 'nio/client/__init__.py'
> adding 'nio/client/async_client.py'
> adding 'nio/client/base_client.py'
> adding 'nio/client/http_client.py'
> adding 'nio/crypto/__init__.py'
> adding 'nio/crypto/async_attachments.py'
> adding 'nio/crypto/attachments.py'
> adding 'nio/crypto/device.py'
> adding 'nio/crypto/key_export.py'
> adding 'nio/crypto/key_request.py'
> adding 'nio/crypto/log.py'
> adding 'nio/crypto/memorystores.py'
> adding 'nio/crypto/olm_machine.py'
> adding 'nio/crypto/sas.py'
> adding 'nio/crypto/sessions.py'
> adding 'nio/event_builders/__init__.py'
> adding 'nio/event_builders/direct_messages.py'
> adding 'nio/event_builders/event_builder.py'
> adding 'nio/event_builders/state_events.py'
> adding 'nio/events/__init__.py'
> adding 'nio/events/account_data.py'
> adding 'nio/events/common.py'
> adding 'nio/events/ephemeral.py'
> adding 'nio/events/invite_events.py'
> adding 'nio/events/misc.py'
> adding 'nio/events/presence.py'
> adding 'nio/events/room_events.py'
> adding 'nio/events/to_device.py'
> adding 'nio/store/__init__.py'
> adding 'nio/store/database.py'
> adding 'nio/store/file_trustdb.py'
> adding 'nio/store/log.py'
> adding 'nio/store/models.py'
> adding 'matrix_nio-0.25.2.dist-info/METADATA'
> adding 'matrix_nio-0.25.2.dist-info/WHEEL'
> adding 'matrix_nio-0.25.2.dist-info/top_level.txt'
> adding 'matrix_nio-0.25.2.dist-info/RECORD'
> removing build/bdist.linux-x86_64/wheel
> Successfully built matrix_nio-0.25.2-py3-none-any.whl
> I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.13 with "installer" module
>    dh_auto_test -O--buildsystem=pybuild
> I: pybuild base:311: cd /build/reproducible-path/python-matrix-nio-0.25.2/.pybuild/cpython3_3.13/build; python3.13 -m pytest -k "not test_connect_wrapper"
> ============================= test session starts ==============================
> platform linux -- Python 3.13.7, pytest-8.4.2, pluggy-1.6.0
> benchmark: 5.1.0 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
> rootdir: /build/reproducible-path/python-matrix-nio-0.25.2/.pybuild/cpython3_3.13/build
> configfile: pyproject.toml
> plugins: aiohttp-1.1.0, benchmark-5.1.0, asyncio-1.1.0, hypothesis-6.139.2, typeguard-4.4.4, cov-5.0.0, Faker-33.3.1
> asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function
> collected 427 items / 1 deselected / 426 selected
> 
> tests/api_test.py ....                                                   [  0%]
> tests/async_attachment_test.py ...............                           [  4%]
> tests/async_client_test.py ............................................. [ 15%]
> ................................................EE................       [ 30%]
> tests/attachment_test.py .......                                         [ 32%]
> tests/client_test.py ...........................................         [ 42%]
> tests/encryption_test.py ...............................                 [ 49%]
> tests/event_builders_test.py .......                                     [ 51%]
> tests/event_test.py ..................................................   [ 62%]
> tests/http2_test.py ....                                                 [ 63%]
> tests/http_test.py ..                                                    [ 64%]
> tests/key_export_test.py ........                                        [ 66%]
> tests/memory_store_test.py ....                                          [ 67%]
> tests/responses_test.py ...................................              [ 75%]
> tests/room_test.py ...............................                       [ 82%]
> tests/sas_test.py ...............................                        [ 89%]
> tests/sessions_test.py ....                                              [ 90%]
> tests/store_test.py .......................................              [100%]
> 
> ==================================== ERRORS ====================================
> ________________ ERROR at setup of TestClass.test_sync_forever _________________
> file /build/reproducible-path/python-matrix-nio-0.25.2/.pybuild/cpython3_3.13/build/tests/async_client_test.py, line 2804
>       async def test_sync_forever(self, async_client, aioresponse, event_loop):
>           sync_url = re.compile(
>               rf"^https://example\.org{MATRIX_API_PATH_V3}/sync",
>           )
> 
>           aioresponse.get(
>               sync_url,
>               status=200,
>               payload=self.sync_response,
>           )
> 
>           aioresponse.get(sync_url, status=200, payload=self.empty_sync, repeat=True)
> 
>           aioresponse.post(
>               f"{BASE_URL_V3}/keys/upload",
>               status=200,
>               payload=self.final_keys_upload_response,
>           )
> 
>           aioresponse.post(
>               f"{BASE_URL_V3}/keys/query",
>               status=200,
>               payload=self.keys_query_response,
>               repeat=True,
>           )
> 
>           await async_client.receive_response(
>               LoginResponse.from_dict(self.login_response)
>           )
> 
>           assert async_client.should_upload_keys
> 
>           task: asyncio.Task = event_loop.create_task(
>               async_client.sync_forever(loop_sleep_time=100)
>           )
>           await async_client.synced.wait()
> 
>           assert not async_client.should_upload_keys
> 
>           task.cancel()
>           with pytest.raises(asyncio.CancelledError):
>               await task
> E       fixture 'event_loop' not found
> >       available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_faker, _session_scoped_runner, aiohttp_client, aiohttp_client_cls, aiohttp_raw_server, aiohttp_server, aioresponse, alice_client, async_client, async_client_pair, async_client_pair_same_user, benchmark, benchmark_weave, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, client, client_no_e2e, cov, doctest_namespace, event_loop_policy, faker, frame_factory, http_client, monkeypatch, no_cover, olm_machine, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, tempdir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unauthed_async_client, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory
> >       use 'pytest --fixtures [testpath]' for help on them.
> 
> /build/reproducible-path/python-matrix-nio-0.25.2/.pybuild/cpython3_3.13/build/tests/async_client_test.py:2804
> ______________ ERROR at setup of TestClass.test_stop_sync_forever ______________
> file /build/reproducible-path/python-matrix-nio-0.25.2/.pybuild/cpython3_3.13/build/tests/async_client_test.py, line 2847
>       async def test_stop_sync_forever(self, async_client, aioresponse, event_loop):
>           sync_url = re.compile(rf"^https://example\.org{MATRIX_API_PATH_V3}/sync")
> 
>           aioresponse.get(
>               sync_url,
>               status=200,
>               payload=self.sync_response,
>           )
> 
>           aioresponse.get(sync_url, status=200, payload=self.empty_sync, repeat=True)
> 
>           aioresponse.post(
>               f"{BASE_URL_V3}/keys/upload",
>               status=200,
>               payload=self.final_keys_upload_response,
>           )
> 
>           aioresponse.post(
>               f"{BASE_URL_V3}/keys/query",
>               status=200,
>               payload=self.keys_query_response,
>               repeat=True,
>           )
> 
>           await async_client.receive_response(
>               LoginResponse.from_dict(self.login_response)
>           )
> 
>           received = set()
> 
>           async def event_callback(event: PresenceEvent):
>               received.add(event.user_id)
>               async_client.stop_sync_forever()
> 
>           async_client.add_presence_callback(event_callback, PresenceEvent)
> 
>           task: asyncio.Task = event_loop.create_task(
>               async_client.sync_forever(loop_sleep_time=100)
>           )
> 
>           await asyncio.wait_for(task, 120)
> 
>           assert "@example:localhost" in received
>           assert "@example2:localhost" in received
> E       fixture 'event_loop' not found
> >       available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_faker, _session_scoped_runner, aiohttp_client, aiohttp_client_cls, aiohttp_raw_server, aiohttp_server, aioresponse, alice_client, async_client, async_client_pair, async_client_pair_same_user, benchmark, benchmark_weave, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, client, client_no_e2e, cov, doctest_namespace, event_loop_policy, faker, frame_factory, http_client, monkeypatch, no_cover, olm_machine, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, tempdir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unauthed_async_client, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory
> >       use 'pytest --fixtures [testpath]' for help on them.
> 
> /build/reproducible-path/python-matrix-nio-0.25.2/.pybuild/cpython3_3.13/build/tests/async_client_test.py:2847
> 
> ------------------------------------------------ benchmark: 1 tests ------------------------------------------------
> Name (time in ms)            Min       Max      Mean  StdDev    Median     IQR  Outliers     OPS  Rounds  Iterations
> --------------------------------------------------------------------------------------------------------------------
> test_encrypt_rounds     412.5793  422.1567  415.9640  4.2305  413.9192  6.8075       1;0  2.4041       5           1
> --------------------------------------------------------------------------------------------------------------------
> 
> Legend:
>   Outliers: 1 Standard Deviation from Mean; 1.5 IQR (InterQuartile Range) from 1st Quartile and 3rd Quartile.
>   OPS: Operations Per Second, computed as 1 / Mean
> =========================== short test summary info ============================
> ERROR tests/async_client_test.py::TestClass::test_sync_forever
> ERROR tests/async_client_test.py::TestClass::test_stop_sync_forever
> ============ 424 passed, 1 deselected, 2 errors in 73.85s (0:01:13) ============
> E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /build/reproducible-path/python-matrix-nio-0.25.2/.pybuild/cpython3_3.13/build; python3.13 -m pytest -k "not test_connect_wrapper"
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13



More information about the Pkg-matrix-maintainers mailing list