--- Begin Message ---
Package: src:home-assistant-bluetooth
Version: 1.13.1-1
Severity: serious
Tags: ftbfs trixie sid
Dear maintainer:
During a rebuild of all packages in unstable, your package failed to build:
--------------------------------------------------------------------------------
[...]
debian/rules clean
dh clean --buildsystem=pybuild
dh_auto_clean -O--buildsystem=pybuild
dh_autoreconf_clean -O--buildsystem=pybuild
dh_clean -O--buildsystem=pybuild
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 /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13
* Building wheel...
Successfully built home_assistant_bluetooth-1.13.1-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 /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build;
python3.13 -m pytest --no-cov
============================= test session starts ==============================
platform linux -- Python 3.13.3, pytest-8.3.5, pluggy-1.5.0 --
/usr/bin/python3.13
cachedir: .pytest_cache
rootdir: /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build
configfile: pyproject.toml
plugins: typeguard-4.4.2, cov-5.0.0
collecting ... collected 6 items
tests/test_models.py::test_model PASSED [ 16%]
tests/test_models.py::test_model_from_bleak PASSED [ 33%]
tests/test_models.py::test_model_from_scanner FAILED [ 50%]
tests/test_models.py::test_construct_service_info_bleak FAILED [ 66%]
tests/test_models.py::test_from_device_and_advertisement_data FAILED [ 83%]
tests/test_models.py::test_pyobjc_compat FAILED [100%]
=================================== FAILURES ===================================
___________________________ test_model_from_scanner ____________________________
def test_model_from_scanner():
switchbot_device = BLEDevice("44:44:33:11:23:45", "wohand", {}, -127)
switchbot_adv = generate_advertisement_data(
local_name="wohand",
service_uuids=["cba20d00-224d-11e6-9fb8-0002a5d5c51b"]
)
now = time.monotonic()
service_info = BluetoothServiceInfoBleak.from_scan(
SOURCE_LOCAL, switchbot_device, switchbot_adv, now, True
)
assert service_info.service_uuids ==
["cba20d00-224d-11e6-9fb8-0002a5d5c51b"]
assert service_info.name == "wohand"
assert service_info.source == SOURCE_LOCAL
assert service_info.manufacturer is None
assert service_info.manufacturer_id is None
assert service_info.time == now
assert service_info.connectable is True
safe_as_dict = service_info.as_dict()
> assert safe_as_dict == {
"address": "44:44:33:11:23:45",
"advertisement": switchbot_adv,
"device": switchbot_device,
"connectable": True,
"manufacturer_data": {},
"name": "wohand",
"rssi": -127,
"service_data": {},
"service_uuids": ["cba20d00-224d-11e6-9fb8-0002a5d5c51b"],
"source": "local",
"time": now,
"tx_power": -127,
}
E AssertionError: assert {'address': '... wohand), ...} == {'address':
'... wohand), ...}
E
E Omitting 12 identical items, use -vv to show
E Left contains 1 more item:
E {'raw': None}
E
E Full diff:
E {...
E
E ...Full output truncated (16 lines hidden), use '-vv' to show
tests/test_models.py:79: AssertionError
______________________ test_construct_service_info_bleak _______________________
def test_construct_service_info_bleak():
switchbot_device = BLEDevice("44:44:33:11:23:45", "wohand", {}, -127)
switchbot_adv = generate_advertisement_data(
local_name="wohand",
service_uuids=["cba20d00-224d-11e6-9fb8-0002a5d5c51b"]
)
now = time.monotonic()
service_info = BluetoothServiceInfoBleak(
name="wohand",
address="44:44:33:11:23:45",
rssi=-127,
manufacturer_data=switchbot_adv.manufacturer_data,
service_data=switchbot_adv.service_data,
service_uuids=switchbot_adv.service_uuids,
source=SOURCE_LOCAL,
device=switchbot_device,
advertisement=switchbot_adv,
connectable=False,
time=now,
tx_power=None,
)
assert service_info.service_uuids ==
["cba20d00-224d-11e6-9fb8-0002a5d5c51b"]
assert service_info.name == "wohand"
assert service_info.source == SOURCE_LOCAL
assert service_info.manufacturer is None
assert service_info.manufacturer_id is None
assert service_info.time == now
assert service_info.connectable is False
safe_as_dict = service_info.as_dict()
> assert safe_as_dict == {
"address": "44:44:33:11:23:45",
"advertisement": switchbot_adv,
"device": switchbot_device,
"connectable": False,
"manufacturer_data": {},
"name": "wohand",
"rssi": -127,
"service_data": {},
"service_uuids": ["cba20d00-224d-11e6-9fb8-0002a5d5c51b"],
"source": "local",
"time": now,
"tx_power": None,
}
E AssertionError: assert {'address': '... wohand), ...} == {'address':
'... wohand), ...}
E
E Omitting 12 identical items, use -vv to show
E Left contains 1 more item:
E {'raw': None}
E
E Full diff:
E {...
E
E ...Full output truncated (16 lines hidden), use '-vv' to show
tests/test_models.py:125: AssertionError
___________________ test_from_device_and_advertisement_data ____________________
def test_from_device_and_advertisement_data():
"""Test creating a BluetoothServiceInfoBleak from a BLEDevice and
AdvertisementData."""
switchbot_device = BLEDevice("44:44:33:11:23:45", "wohand", {}, -127)
switchbot_adv = generate_advertisement_data(
local_name="wohand",
service_uuids=["cba20d00-224d-11e6-9fb8-0002a5d5c51b"]
)
now_monotonic = time.monotonic()
service_info =
BluetoothServiceInfoBleak.from_device_and_advertisement_data(
switchbot_device, switchbot_adv, SOURCE_LOCAL, now_monotonic, True
)
assert service_info.service_uuids ==
["cba20d00-224d-11e6-9fb8-0002a5d5c51b"]
assert service_info.name == "wohand"
assert service_info.source == SOURCE_LOCAL
assert service_info.manufacturer is None
assert service_info.manufacturer_id is None
safe_as_dict = service_info.as_dict()
> assert safe_as_dict == {
"address": "44:44:33:11:23:45",
"advertisement": switchbot_adv,
"device": switchbot_device,
"connectable": True,
"manufacturer_data": {},
"name": "wohand",
"rssi": -127,
"service_data": {},
"service_uuids": ["cba20d00-224d-11e6-9fb8-0002a5d5c51b"],
"source": "local",
"time": now_monotonic,
"tx_power": -127,
}
E AssertionError: assert {'address': '... wohand), ...} == {'address':
'... wohand), ...}
E
E Omitting 12 identical items, use -vv to show
E Left contains 1 more item:
E {'raw': None}
E
E Full diff:
E {...
E
E ...Full output truncated (16 lines hidden), use '-vv' to show
tests/test_models.py:159: AssertionError
______________________________ test_pyobjc_compat ______________________________
def test_pyobjc_compat():
class pyobjc_str(str):
pass
class pyobjc_int(int):
pass
name = pyobjc_str("wohand")
address = pyobjc_str("44:44:33:11:23:45")
rssi = pyobjc_int(-127)
assert name == "wohand"
assert address == "44:44:33:11:23:45"
assert rssi == -127
switchbot_device = BLEDevice(address, name, {}, rssi)
switchbot_adv = generate_advertisement_data(
local_name=name,
service_uuids=["cba20d00-224d-11e6-9fb8-0002a5d5c51b"]
)
now = time.monotonic()
service_info = BluetoothServiceInfoBleak(
name=str(name),
address=str(address),
rssi=rssi,
manufacturer_data=switchbot_adv.manufacturer_data,
service_data=switchbot_adv.service_data,
service_uuids=switchbot_adv.service_uuids,
source=SOURCE_LOCAL,
device=switchbot_device,
advertisement=switchbot_adv,
connectable=False,
time=now,
tx_power=None,
)
assert service_info.service_uuids ==
["cba20d00-224d-11e6-9fb8-0002a5d5c51b"]
assert service_info.name == "wohand"
assert service_info.source == SOURCE_LOCAL
assert service_info.manufacturer is None
assert service_info.manufacturer_id is None
assert service_info.time == now
assert service_info.connectable is False
safe_as_dict = service_info.as_dict()
> assert safe_as_dict == {
"address": "44:44:33:11:23:45",
"advertisement": switchbot_adv,
"device": switchbot_device,
"connectable": False,
"manufacturer_data": {},
"name": "wohand",
"rssi": -127,
"service_data": {},
"service_uuids": ["cba20d00-224d-11e6-9fb8-0002a5d5c51b"],
"source": "local",
"time": now,
"tx_power": None,
}
E AssertionError: assert {'address': '... wohand), ...} == {'address':
'... wohand), ...}
E
E Omitting 12 identical items, use -vv to show
E Left contains 1 more item:
E {'raw': None}
E
E Full diff:
E {...
E
E ...Full output truncated (16 lines hidden), use '-vv' to show
tests/test_models.py:219: AssertionError
=========================== short test summary info ============================
FAILED tests/test_models.py::test_model_from_scanner - AssertionError: assert...
FAILED tests/test_models.py::test_construct_service_info_bleak - AssertionErr...
FAILED tests/test_models.py::test_from_device_and_advertisement_data - Assert...
FAILED tests/test_models.py::test_pyobjc_compat - AssertionError: assert {'ad...
========================= 4 failed, 2 passed in 0.07s ==========================
E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build; python3.13 -m pytest --no-cov
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13
returned exit code 13
make: *** [debian/rules:6: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------
The above is just how the build ends and not necessarily the most relevant part.
If required, the full build log is available here:
https://people.debian.org/~sanvila/build-logs/202505/
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 could not 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:home-assistant-bluetooth, so that this is
still
visible in the BTS web page for this package.
Thanks.
--- End Message ---