[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