[Debian-iot-maintainers] Bug#1114279: pyicloud: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13
Santiago Vila
sanvila at debian.org
Fri Sep 5 19:22:58 BST 2025
Package: src:pyicloud
Version: 2.0.1-1
Severity: serious
Tags: ftbfs forky sid
Dear maintainer:
During a rebuild of all packages in unstable, your package failed to build.
Below you will find how the build ends (probably the most relevant part,
but not necessarily). If required, the full build log is available here:
https://people.debian.org/~sanvila/build-logs/202509/
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:pyicloud, so that this is still
visible in the BTS web page for this package.
Thanks.
--------------------------------------------------------------------------------
[...]
debian/rules clean
dh clean --with python3 --buildsystem=pybuild
dh_auto_clean -O--buildsystem=pybuild
dh_autoreconf_clean -O--buildsystem=pybuild
dh_clean -O--buildsystem=pybuild
debian/rules binary
dh binary --with python3 --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_pyicloud
* Building wheel...
running bdist_wheel
running build
running build_py
creating build/lib/pyicloud
copying pyicloud/exceptions.py -> build/lib/pyicloud
copying pyicloud/base.py -> build/lib/pyicloud
copying pyicloud/session.py -> build/lib/pyicloud
copying pyicloud/const.py -> build/lib/pyicloud
copying pyicloud/cmdline.py -> build/lib/pyicloud
copying pyicloud/utils.py -> build/lib/pyicloud
copying pyicloud/__init__.py -> build/lib/pyicloud
creating build/lib/pyicloud/services
copying pyicloud/services/calendar.py -> build/lib/pyicloud/services
copying pyicloud/services/drive.py -> build/lib/pyicloud/services
copying pyicloud/services/base.py -> build/lib/pyicloud/services
copying pyicloud/services/account.py -> build/lib/pyicloud/services
copying pyicloud/services/hidemyemail.py -> build/lib/pyicloud/services
copying pyicloud/services/ubiquity.py -> build/lib/pyicloud/services
copying pyicloud/services/contacts.py -> build/lib/pyicloud/services
copying pyicloud/services/findmyiphone.py -> build/lib/pyicloud/services
copying pyicloud/services/reminders.py -> build/lib/pyicloud/services
copying pyicloud/services/photos.py -> build/lib/pyicloud/services
copying pyicloud/services/__init__.py -> build/lib/pyicloud/services
running egg_info
creating pyicloud.egg-info
writing pyicloud.egg-info/PKG-INFO
writing dependency_links to pyicloud.egg-info/dependency_links.txt
writing entry points to pyicloud.egg-info/entry_points.txt
writing requirements to pyicloud.egg-info/requires.txt
writing top-level names to pyicloud.egg-info/top_level.txt
writing manifest file 'pyicloud.egg-info/SOURCES.txt'
reading manifest file 'pyicloud.egg-info/SOURCES.txt'
adding license file 'LICENSE.txt'
writing manifest file 'pyicloud.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/pyicloud
copying build/lib/pyicloud/exceptions.py -> build/bdist.linux-x86_64/wheel/./pyicloud
copying build/lib/pyicloud/base.py -> build/bdist.linux-x86_64/wheel/./pyicloud
creating build/bdist.linux-x86_64/wheel/pyicloud/services
copying build/lib/pyicloud/services/calendar.py -> build/bdist.linux-x86_64/wheel/./pyicloud/services
copying build/lib/pyicloud/services/drive.py -> build/bdist.linux-x86_64/wheel/./pyicloud/services
copying build/lib/pyicloud/services/base.py -> build/bdist.linux-x86_64/wheel/./pyicloud/services
copying build/lib/pyicloud/services/account.py -> build/bdist.linux-x86_64/wheel/./pyicloud/services
copying build/lib/pyicloud/services/hidemyemail.py -> build/bdist.linux-x86_64/wheel/./pyicloud/services
copying build/lib/pyicloud/services/ubiquity.py -> build/bdist.linux-x86_64/wheel/./pyicloud/services
copying build/lib/pyicloud/services/contacts.py -> build/bdist.linux-x86_64/wheel/./pyicloud/services
copying build/lib/pyicloud/services/findmyiphone.py -> build/bdist.linux-x86_64/wheel/./pyicloud/services
copying build/lib/pyicloud/services/reminders.py -> build/bdist.linux-x86_64/wheel/./pyicloud/services
copying build/lib/pyicloud/services/photos.py -> build/bdist.linux-x86_64/wheel/./pyicloud/services
copying build/lib/pyicloud/services/__init__.py -> build/bdist.linux-x86_64/wheel/./pyicloud/services
copying build/lib/pyicloud/session.py -> build/bdist.linux-x86_64/wheel/./pyicloud
copying build/lib/pyicloud/const.py -> build/bdist.linux-x86_64/wheel/./pyicloud
copying build/lib/pyicloud/cmdline.py -> build/bdist.linux-x86_64/wheel/./pyicloud
copying build/lib/pyicloud/utils.py -> build/bdist.linux-x86_64/wheel/./pyicloud
copying build/lib/pyicloud/__init__.py -> build/bdist.linux-x86_64/wheel/./pyicloud
running install_egg_info
Copying pyicloud.egg-info to build/bdist.linux-x86_64/wheel/./pyicloud-0.0.0.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/pyicloud-0.0.0.dist-info/WHEEL
creating '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_pyicloud/.tmp-fto0s39j/pyicloud-0.0.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'pyicloud/__init__.py'
adding 'pyicloud/base.py'
adding 'pyicloud/cmdline.py'
adding 'pyicloud/const.py'
adding 'pyicloud/exceptions.py'
adding 'pyicloud/session.py'
adding 'pyicloud/utils.py'
adding 'pyicloud/services/__init__.py'
adding 'pyicloud/services/account.py'
adding 'pyicloud/services/base.py'
adding 'pyicloud/services/calendar.py'
adding 'pyicloud/services/contacts.py'
adding 'pyicloud/services/drive.py'
adding 'pyicloud/services/findmyiphone.py'
adding 'pyicloud/services/hidemyemail.py'
adding 'pyicloud/services/photos.py'
adding 'pyicloud/services/reminders.py'
adding 'pyicloud/services/ubiquity.py'
adding 'pyicloud-0.0.0.dist-info/licenses/LICENSE.txt'
adding 'pyicloud-0.0.0.dist-info/METADATA'
adding 'pyicloud-0.0.0.dist-info/WHEEL'
adding 'pyicloud-0.0.0.dist-info/entry_points.txt'
adding 'pyicloud-0.0.0.dist-info/top_level.txt'
adding 'pyicloud-0.0.0.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
Successfully built pyicloud-0.0.0-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_pyicloud/build; python3.13 -m pytest tests
============================= test session starts ==============================
platform linux -- Python 3.13.7, pytest-8.4.1, pluggy-1.6.0
rootdir: /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_pyicloud/build
configfile: pyproject.toml
plugins: socket-0.7.0, typeguard-4.4.4
collected 137 items
tests/test_account.py ....... [ 5%]
tests/test_base.py ..................... [ 20%]
tests/test_calendar.py ......FFFFFF [ 29%]
tests/test_cmdline.py ............... [ 40%]
tests/test_contacts.py ...... [ 44%]
tests/test_drive.py ......................... [ 62%]
tests/test_findmyiphone.py .... [ 65%]
tests/test_hidemyemail.py ......... [ 72%]
tests/test_photos.py ....................... [ 89%]
tests/test_reminders.py ..... [ 92%]
tests/test_ubiquity.py .......... [100%]
=================================== FAILURES ===================================
_____________________ test_calendar_service_get_calendars ______________________
def test_calendar_service_get_calendars() -> None:
"""Test CalendarService get_calendars method."""
mock_session = MagicMock(spec=PyiCloudSession)
mock_response = MagicMock(spec=Response)
mock_response.json.return_value = {"Collection": [{"title": "Test Calendar"}]}
mock_session.get.return_value = mock_response
with patch("pyicloud.services.calendar.get_localzone_name", return_value="UTC"):
service = CalendarService(
"https://example.com", mock_session, {"dsid": "12345"}
)
> calendars = service.get_calendars()
^^^^^^^^^^^^^^^^^^^^^^^
tests/test_calendar.py:82:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pyicloud/services/calendar.py:298: in get_calendars
params: dict[str, Any] = self.default_params
^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pyicloud.services.calendar.CalendarService object at 0x7fe697a41550>
@property
def default_params(self) -> dict[str, Any]:
"""Returns the default parameters for the calendar service."""
today: datetime = datetime.today()
first_day, last_day = monthrange(today.year, today.month)
> from_dt = datetime(today.year, today.month, first_day)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E ValueError: day is out of range for month
pyicloud/services/calendar.py:224: ValueError
______________________ test_calendar_service_add_calendar ______________________
def test_calendar_service_add_calendar() -> None:
"""Test CalendarService add_calendar method."""
mock_session = MagicMock(spec=PyiCloudSession)
mock_response = MagicMock(spec=Response)
mock_response.json.return_value = {"status": "success"}
mock_session.post.return_value = mock_response
with patch("pyicloud.services.calendar.get_localzone_name", return_value="UTC"):
service = CalendarService(
"https://example.com", mock_session, {"dsid": "12345"}
)
calendar = CalendarObject(title="New Calendar")
> response = service.add_calendar(calendar)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_calendar.py:98:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pyicloud/services/calendar.py:313: in add_calendar
params: dict[str, Any] = self.default_params
^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pyicloud.services.calendar.CalendarService object at 0x7fe697689450>
@property
def default_params(self) -> dict[str, Any]:
"""Returns the default parameters for the calendar service."""
today: datetime = datetime.today()
first_day, last_day = monthrange(today.year, today.month)
> from_dt = datetime(today.year, today.month, first_day)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E ValueError: day is out of range for month
pyicloud/services/calendar.py:224: ValueError
____________________ test_calendar_service_remove_calendar _____________________
def test_calendar_service_remove_calendar() -> None:
"""Test CalendarService remove_calendar method."""
mock_session = MagicMock(spec=PyiCloudSession)
mock_response = MagicMock(spec=Response)
mock_response.json.return_value = {"status": "success"}
mock_session.post.return_value = mock_response
with patch("pyicloud.services.calendar.get_localzone_name", return_value="UTC"):
service = CalendarService(
"https://example.com", mock_session, {"dsid": "12345"}
)
> response = service.remove_calendar("calendar123")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_calendar.py:113:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pyicloud/services/calendar.py:326: in remove_calendar
params: dict[str, Any] = self.default_params
^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pyicloud.services.calendar.CalendarService object at 0x7fe697688190>
@property
def default_params(self) -> dict[str, Any]:
"""Returns the default parameters for the calendar service."""
today: datetime = datetime.today()
first_day, last_day = monthrange(today.year, today.month)
> from_dt = datetime(today.year, today.month, first_day)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E ValueError: day is out of range for month
pyicloud/services/calendar.py:224: ValueError
_______________________ test_calendar_service_get_events _______________________
def test_calendar_service_get_events() -> None:
"""Test CalendarService get_events method."""
mock_session = MagicMock(spec=PyiCloudSession)
mock_response = MagicMock(spec=Response)
mock_response.json.return_value = {"Event": [{"title": "Test Event"}]}
mock_session.get.return_value = mock_response
with patch("pyicloud.services.calendar.get_localzone_name", return_value="UTC"):
service = CalendarService(
"https://example.com", mock_session, {"dsid": "12345"}
)
> events = service.get_events()
^^^^^^^^^^^^^^^^^^^^
tests/test_calendar.py:127:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pyicloud/services/calendar.py:361: in get_events
response: dict[str, Any] = self.refresh_client(from_dt, to_dt)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pyicloud.services.calendar.CalendarService object at 0x7fe6976b2650>
from_dt = None, to_dt = None
def refresh_client(self, from_dt=None, to_dt=None) -> dict[str, Any]:
"""
Refreshes the CalendarService endpoint, ensuring that the
event data is up-to-date. If no 'from_dt' or 'to_dt' datetimes
have been given, the range becomes this month.
"""
today: datetime = datetime.today()
first_day, last_day = monthrange(today.year, today.month)
if not from_dt:
> from_dt = datetime(today.year, today.month, first_day)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E ValueError: day is out of range for month
pyicloud/services/calendar.py:267: ValueError
_______________________ test_calendar_service_add_event ________________________
def test_calendar_service_add_event() -> None:
"""Test CalendarService add_event method."""
mock_session = MagicMock(spec=PyiCloudSession)
mock_response = MagicMock(spec=Response)
mock_response.json.return_value = {"status": "success"}
mock_session.post.return_value = mock_response
with patch("pyicloud.services.calendar.get_localzone_name", return_value="UTC"):
service = CalendarService(
"https://example.com", mock_session, {"dsid": "12345"}
)
service.get_ctag = MagicMock(return_value="etag123")
event = EventObject(pguid="calendar123", title="New Event")
> response = service.add_event(event)
^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_calendar.py:144:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pyicloud/services/calendar.py:402: in add_event
params = self.default_params
^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pyicloud.services.calendar.CalendarService object at 0x7fe697b5cd60>
@property
def default_params(self) -> dict[str, Any]:
"""Returns the default parameters for the calendar service."""
today: datetime = datetime.today()
first_day, last_day = monthrange(today.year, today.month)
> from_dt = datetime(today.year, today.month, first_day)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E ValueError: day is out of range for month
pyicloud/services/calendar.py:224: ValueError
______________________ test_calendar_service_remove_event ______________________
def test_calendar_service_remove_event() -> None:
"""Test CalendarService remove_event method."""
mock_session = MagicMock(spec=PyiCloudSession)
mock_response = MagicMock(spec=Response)
mock_response.json.return_value = {"status": "success"}
mock_session.post.return_value = mock_response
with patch("pyicloud.services.calendar.get_localzone_name", return_value="UTC"):
service = CalendarService(
"https://example.com", mock_session, {"dsid": "12345"}
)
service.get_ctag = MagicMock(return_value="etag123")
event = EventObject(pguid="calendar123", title="New Event")
> response = service.remove_event(event)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_calendar.py:161:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pyicloud/services/calendar.py:419: in remove_event
params: dict[str, Any] = self.default_params
^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pyicloud.services.calendar.CalendarService object at 0x7fe6977004d0>
@property
def default_params(self) -> dict[str, Any]:
"""Returns the default parameters for the calendar service."""
today: datetime = datetime.today()
first_day, last_day = monthrange(today.year, today.month)
> from_dt = datetime(today.year, today.month, first_day)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E ValueError: day is out of range for month
pyicloud/services/calendar.py:224: ValueError
=============================== warnings summary ===============================
tests/test_base.py::test_confirm_security_key_success
tests/test_base.py::test_confirm_security_key_success
tests/test_base.py::test_confirm_security_key_success
tests/test_base.py::test_confirm_security_key_success
tests/test_base.py::test_confirm_security_key_success
tests/test_base.py::test_confirm_security_key_success
tests/test_base.py::test_confirm_security_key_success
tests/test_base.py::test_confirm_security_key_success
tests/test_base.py::test_confirm_security_key_success
/usr/lib/python3/dist-packages/fido2/features.py:66: DeprecationWarning: Deprecated use of webauthn_json_mapping.
You are using deprecated functionality which will change in the next major version of
python-fido2. You can opt-in to use the new functionality now by adding the following
to your code somewhere where it gets executed prior to using the affected functionality:
import fido2.features
fido2.features.webauthn_json_mapping.enabled = True
To silence this warning but retain the current behavior, instead set enabled to False:
fido2.features.webauthn_json_mapping.enabled = False
JSON values for WebAuthn data class Mapping interface.
This changes the keys and values used by the webauthn data classes when accessed using
the Mapping (dict) interface (eg. user_entity["id"] and the from_dict() methods) to be
JSON-friendly and align with the current draft of the next WebAuthn Level specification.
For the most part, this means that binary values (bytes) are represented as URL-safe
base64 encoded strings instead.
warnings.warn(
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_calendar.py::test_calendar_service_get_calendars - ValueErr...
FAILED tests/test_calendar.py::test_calendar_service_add_calendar - ValueErro...
FAILED tests/test_calendar.py::test_calendar_service_remove_calendar - ValueE...
FAILED tests/test_calendar.py::test_calendar_service_get_events - ValueError:...
FAILED tests/test_calendar.py::test_calendar_service_add_event - ValueError: ...
FAILED tests/test_calendar.py::test_calendar_service_remove_event - ValueErro...
================== 6 failed, 131 passed, 9 warnings in 0.54s ===================
E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_pyicloud/build; python3.13 -m pytest tests
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13
make: *** [debian/rules:7: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------
More information about the Debian-iot-maintainers
mailing list