Debian Bug report logs - #1074724
magicgui: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.11 3.12" returned exit code 13

version graph

Package: src:magicgui; Maintainer for src:magicgui is (unknown);

Reported by: Lucas Nussbaum <lucas@debian.org>

Date: Tue, 2 Jul 2024 13:39:56 UTC

Severity: serious

Tags: ftbfs, sid, trixie

Found in version magicgui/0.7.2-4

Reply or subscribe to this bug.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to debian-bugs-dist@lists.debian.org, Debian Python Team <team+python@tracker.debian.org>:
Bug#1074724; Package src:magicgui. (Tue, 02 Jul 2024 13:39:58 GMT) (full text, mbox, link).


Acknowledgement sent to Lucas Nussbaum <lucas@debian.org>:
New Bug report received and forwarded. Copy sent to Debian Python Team <team+python@tracker.debian.org>. (Tue, 02 Jul 2024 13:39:58 GMT) (full text, mbox, link).


Message #5 received at submit@bugs.debian.org (full text, mbox, reply):

From: Lucas Nussbaum <lucas@debian.org>
To: submit@bugs.debian.org
Subject: magicgui: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.11 3.12" returned exit code 13
Date: Tue, 2 Jul 2024 15:19:40 +0200
Source: magicgui
Version: 0.7.2-4
Severity: serious
Justification: FTBFS
Tags: trixie sid ftbfs
User: lucas@debian.org
Usertags: ftbfs-20240702 ftbfs-trixie

Hi,

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


Relevant part (hopefully):
>  debian/rules binary
> dh binary --with=python3 --with=numpy3 --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.11 with "build" module
> I: pybuild base:311: python3.11 -m build --skip-dependency-check --no-isolation --wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_magicgui  
> * Building wheel...
> Successfully built magicgui-0.7.2-py3-none-any.whl
> I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.11 with "installer" module
> I: pybuild plugin_pyproject:129: Building wheel for python3.12 with "build" module
> I: pybuild base:311: python3.12 -m build --skip-dependency-check --no-isolation --wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_magicgui  
> * Building wheel...
> Successfully built magicgui-0.7.2-py3-none-any.whl
> I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.12 with "installer" module
>    dh_auto_test -O--buildsystem=pybuild
> I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_magicgui/build; python3.11 -m pytest tests
> ============================= test session starts ==============================
> platform linux -- Python 3.11.9, pytest-8.2.2, pluggy-1.5.0
> PyQt5 5.15.10 -- Qt runtime 5.15.13 -- Qt compiled 5.15.13
> rootdir: /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_magicgui/build
> configfile: pyproject.toml
> plugins: xvfb-3.0.0, qt-4.3.1
> collected 313 items / 3 skipped
> 
> tests/test_application.py .                                              [  0%]
> tests/test_backends.py s.........                                        [  3%]
> tests/test_container.py ..............                                   [  7%]
> tests/test_docs.py ss.                                                   [  8%]
> tests/test_factory.py ..........                                         [ 12%]
> tests/test_gui_class.py F.FFF                                            [ 13%]
> tests/test_magicgui.py ...................x............................. [ 29%]
>                                                                          [ 29%]
> tests/test_persistence.py ...                                            [ 30%]
> tests/test_signature.py ....                                             [ 31%]
> tests/test_table.py ............................sss.........             [ 44%]
> tests/test_types.py ...............                                      [ 49%]
> tests/test_ui_field.py s.ss....ss.                                       [ 52%]
> tests/test_widgets.py ......s.s..ss..s.ss..ss.sss.s..s.........s......s. [ 68%]
> s.......s..s............................................................ [ 91%]
> ..........................                                               [100%]
> 
> =================================== FAILURES ===================================
> ________________________________ test_guiclass _________________________________
> 
>     def test_guiclass():
>         """Test that the guiclass decorator works as expected."""
>         mock = Mock()
>     
>         @guiclass
>         class Foo:
>             a: int = 1
>             b: str = "bar"
>     
>             @button
>             def func(self):
>                 mock(asdict(self))
>     
>             # example recommended for type checking
>             if TYPE_CHECKING:
>                 gui: ClassVar[Container]
>                 events: ClassVar[psygnal.SignalGroup]
>     
>         foo = Foo()
>     
>         assert foo.a == 1
>         assert foo.b == "bar"
>     
> >       assert isinstance(foo.gui, Container)
> 
> tests/test_gui_class.py:43: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> magicgui/schema/_guiclass.py:233: in __get__
>     bind_gui_to_instance(wdg, instance)
> magicgui/schema/_guiclass.py:274: in bind_gui_to_instance
>     widget.changed.connect_setattr(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <SignalInstance 'changed' on SpinBox(value=1, annotation=<class 'int'>, name='a')>
> obj = test_guiclass.<locals>.Foo(a=1, b='bar'), attr = 'a'
> maxargs = <object object at 0x7f0102bf5c70>
> 
>     def connect_setattr(
>         self,
>         obj: object,
>         attr: str,
>         maxargs: int | None | object = _NULL,
>         *,
>         on_ref_error: RefErrorChoice = "warn",
>         priority: int = 0,
>     ) -> WeakCallback[None]:
>         """Bind an object attribute to the emitted value of this signal.
>     
>         Equivalent to calling `self.connect(functools.partial(setattr, obj, attr))`,
>         but with additional weakref safety (i.e. a strong reference to `obj` will not
>         be retained). The return object can be used to
>         [`disconnect()`][psygnal.SignalInstance.disconnect], (or you can use
>         [`disconnect_setattr()`][psygnal.SignalInstance.disconnect_setattr]).
>     
>         Parameters
>         ----------
>         obj : object
>             An object.
>         attr : str
>             The name of an attribute on `obj` that should be set to the value of this
>             signal when emitted.
>         maxargs : Optional[int]
>             max number of positional args to accept
>         on_ref_error: {'raise', 'warn', 'ignore'}, optional
>             What to do if a weak reference cannot be created.  If 'raise', a
>             ReferenceError will be raised.  If 'warn' (default), a warning will be
>             issued and a strong-reference will be used. If 'ignore' a strong-reference
>             will be used (silently).
>         priority : int
>             The priority of the callback. This is used to determine the order in which
>             callbacks are called when multiple are connected to the same signal.
>             Higher priority callbacks are called first. Negative values are allowed.
>             The default is 0.
>     
>         Returns
>         -------
>         Tuple
>             (weakref.ref, name, callable).  Reference to the object, name of the
>             attribute, and setattr closure.  Can be used to disconnect the slot.
>     
>         Raises
>         ------
>         ValueError
>             If this is not a single-value signal
>         AttributeError
>             If `obj` has no attribute `attr`.
>     
>         Examples
>         --------
>         >>> class T:
>         ...     sig = Signal(int)
>         >>> class SomeObj:
>         ...     x = 1
>         >>> t = T()
>         >>> my_obj = SomeObj()
>         >>> t.sig.connect_setattr(my_obj, "x")
>         >>> t.sig.emit(5)
>         >>> assert my_obj.x == 5
>         """
>         if maxargs is _NULL:
> >           warnings.warn(
>                 "The default value of maxargs will change from `None` to `1` in "
>                 "version 0.11. To silence this warning, provide an explicit value for "
>                 "maxargs (`None` for current behavior, `1` for future behavior).",
>                 FutureWarning,
>                 stacklevel=2,
>             )
> E           FutureWarning: The default value of maxargs will change from `None` to `1` in version 0.11. To silence this warning, provide an explicit value for maxargs (`None` for current behavior, `1` for future behavior).
> 
> /usr/lib/python3/dist-packages/psygnal/_signal.py:858: FutureWarning
> __________________________ test_on_existing_dataclass __________________________
> 
>     def test_on_existing_dataclass():
>         """Test that the guiclass decorator works on pre-existing dataclasses."""
>     
>         @guiclass
>         @dataclass
>         class Foo:
>             a: int = 1
>             b: str = "bar"
>     
>         foo = Foo()
>         assert foo.a == 1
>         assert foo.b == "bar"
> >       assert isinstance(foo.gui, Container)
> 
> tests/test_gui_class.py:83: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> magicgui/schema/_guiclass.py:233: in __get__
>     bind_gui_to_instance(wdg, instance)
> magicgui/schema/_guiclass.py:274: in bind_gui_to_instance
>     widget.changed.connect_setattr(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <SignalInstance 'changed' on SpinBox(value=1, annotation=<class 'int'>, name='a')>
> obj = test_on_existing_dataclass.<locals>.Foo(a=1, b='bar'), attr = 'a'
> maxargs = <object object at 0x7f0102bf5c70>
> 
>     def connect_setattr(
>         self,
>         obj: object,
>         attr: str,
>         maxargs: int | None | object = _NULL,
>         *,
>         on_ref_error: RefErrorChoice = "warn",
>         priority: int = 0,
>     ) -> WeakCallback[None]:
>         """Bind an object attribute to the emitted value of this signal.
>     
>         Equivalent to calling `self.connect(functools.partial(setattr, obj, attr))`,
>         but with additional weakref safety (i.e. a strong reference to `obj` will not
>         be retained). The return object can be used to
>         [`disconnect()`][psygnal.SignalInstance.disconnect], (or you can use
>         [`disconnect_setattr()`][psygnal.SignalInstance.disconnect_setattr]).
>     
>         Parameters
>         ----------
>         obj : object
>             An object.
>         attr : str
>             The name of an attribute on `obj` that should be set to the value of this
>             signal when emitted.
>         maxargs : Optional[int]
>             max number of positional args to accept
>         on_ref_error: {'raise', 'warn', 'ignore'}, optional
>             What to do if a weak reference cannot be created.  If 'raise', a
>             ReferenceError will be raised.  If 'warn' (default), a warning will be
>             issued and a strong-reference will be used. If 'ignore' a strong-reference
>             will be used (silently).
>         priority : int
>             The priority of the callback. This is used to determine the order in which
>             callbacks are called when multiple are connected to the same signal.
>             Higher priority callbacks are called first. Negative values are allowed.
>             The default is 0.
>     
>         Returns
>         -------
>         Tuple
>             (weakref.ref, name, callable).  Reference to the object, name of the
>             attribute, and setattr closure.  Can be used to disconnect the slot.
>     
>         Raises
>         ------
>         ValueError
>             If this is not a single-value signal
>         AttributeError
>             If `obj` has no attribute `attr`.
>     
>         Examples
>         --------
>         >>> class T:
>         ...     sig = Signal(int)
>         >>> class SomeObj:
>         ...     x = 1
>         >>> t = T()
>         >>> my_obj = SomeObj()
>         >>> t.sig.connect_setattr(my_obj, "x")
>         >>> t.sig.emit(5)
>         >>> assert my_obj.x == 5
>         """
>         if maxargs is _NULL:
> >           warnings.warn(
>                 "The default value of maxargs will change from `None` to `1` in "
>                 "version 0.11. To silence this warning, provide an explicit value for "
>                 "maxargs (`None` for current behavior, `1` for future behavior).",
>                 FutureWarning,
>                 stacklevel=2,
>             )
> E           FutureWarning: The default value of maxargs will change from `None` to `1` in version 0.11. To silence this warning, provide an explicit value for maxargs (`None` for current behavior, `1` for future behavior).
> 
> /usr/lib/python3/dist-packages/psygnal/_signal.py:858: FutureWarning
> _____________________________ test_slots_guiclass ______________________________
> 
>     @pytest.mark.skipif(sys.version_info < (3, 10), reason="slots are python3.10 or higher")
>     def test_slots_guiclass():
>         """Test that the guiclass decorator works as expected."""
>     
>         psyg_v = tuple(int(x.split("r")[0]) for x in psygnal.__version__.split(".")[:3])
>         old_psygnal = psyg_v < (0, 6, 1)
>     
>         @guiclass(slots=True)
>         class Foo:
>             a: int = 1
>             b: str = "bar"
>     
>         foo = Foo()
>     
>         with (
>             pytest.warns(UserWarning, match="Please update psygnal")
>             if old_psygnal
>             else contextlib.nullcontext()
>         ):
> >           gui = foo.gui
> 
> tests/test_gui_class.py:105: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> magicgui/schema/_guiclass.py:233: in __get__
>     bind_gui_to_instance(wdg, instance)
> magicgui/schema/_guiclass.py:274: in bind_gui_to_instance
>     widget.changed.connect_setattr(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <SignalInstance 'changed' on SpinBox(value=1, annotation=<class 'int'>, name='a')>
> obj = test_slots_guiclass.<locals>.Foo(a=1, b='bar'), attr = 'a'
> maxargs = <object object at 0x7f0102bf5c70>
> 
>     def connect_setattr(
>         self,
>         obj: object,
>         attr: str,
>         maxargs: int | None | object = _NULL,
>         *,
>         on_ref_error: RefErrorChoice = "warn",
>         priority: int = 0,
>     ) -> WeakCallback[None]:
>         """Bind an object attribute to the emitted value of this signal.
>     
>         Equivalent to calling `self.connect(functools.partial(setattr, obj, attr))`,
>         but with additional weakref safety (i.e. a strong reference to `obj` will not
>         be retained). The return object can be used to
>         [`disconnect()`][psygnal.SignalInstance.disconnect], (or you can use
>         [`disconnect_setattr()`][psygnal.SignalInstance.disconnect_setattr]).
>     
>         Parameters
>         ----------
>         obj : object
>             An object.
>         attr : str
>             The name of an attribute on `obj` that should be set to the value of this
>             signal when emitted.
>         maxargs : Optional[int]
>             max number of positional args to accept
>         on_ref_error: {'raise', 'warn', 'ignore'}, optional
>             What to do if a weak reference cannot be created.  If 'raise', a
>             ReferenceError will be raised.  If 'warn' (default), a warning will be
>             issued and a strong-reference will be used. If 'ignore' a strong-reference
>             will be used (silently).
>         priority : int
>             The priority of the callback. This is used to determine the order in which
>             callbacks are called when multiple are connected to the same signal.
>             Higher priority callbacks are called first. Negative values are allowed.
>             The default is 0.
>     
>         Returns
>         -------
>         Tuple
>             (weakref.ref, name, callable).  Reference to the object, name of the
>             attribute, and setattr closure.  Can be used to disconnect the slot.
>     
>         Raises
>         ------
>         ValueError
>             If this is not a single-value signal
>         AttributeError
>             If `obj` has no attribute `attr`.
>     
>         Examples
>         --------
>         >>> class T:
>         ...     sig = Signal(int)
>         >>> class SomeObj:
>         ...     x = 1
>         >>> t = T()
>         >>> my_obj = SomeObj()
>         >>> t.sig.connect_setattr(my_obj, "x")
>         >>> t.sig.emit(5)
>         >>> assert my_obj.x == 5
>         """
>         if maxargs is _NULL:
> >           warnings.warn(
>                 "The default value of maxargs will change from `None` to `1` in "
>                 "version 0.11. To silence this warning, provide an explicit value for "
>                 "maxargs (`None` for current behavior, `1` for future behavior).",
>                 FutureWarning,
>                 stacklevel=2,
>             )
> E           FutureWarning: The default value of maxargs will change from `None` to `1` in version 0.11. To silence this warning, provide an explicit value for maxargs (`None` for current behavior, `1` for future behavior).
> 
> /usr/lib/python3/dist-packages/psygnal/_signal.py:858: FutureWarning
> ____________________________ test_guiclass_as_class ____________________________
> 
>     def test_guiclass_as_class():
>         # variant on @guiclass, using class instead of decorator
>         class T2(GuiClass):
>             x: int
>             y: str = "hi"
>     
>             @button
>             def foo(self):
>                 return asdict(self)
>     
>         t2 = T2(1)
>         assert t2.x == 1
>         assert t2.y == "hi"
> >       assert t2.gui.x.value == 1
> 
> tests/test_gui_class.py:141: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> magicgui/schema/_guiclass.py:233: in __get__
>     bind_gui_to_instance(wdg, instance)
> magicgui/schema/_guiclass.py:274: in bind_gui_to_instance
>     widget.changed.connect_setattr(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <SignalInstance 'changed' on SpinBox(value=1, annotation=<class 'int'>, name='x')>
> obj = test_guiclass_as_class.<locals>.T2(x=1, y='hi'), attr = 'x'
> maxargs = <object object at 0x7f0102bf5c70>
> 
>     def connect_setattr(
>         self,
>         obj: object,
>         attr: str,
>         maxargs: int | None | object = _NULL,
>         *,
>         on_ref_error: RefErrorChoice = "warn",
>         priority: int = 0,
>     ) -> WeakCallback[None]:
>         """Bind an object attribute to the emitted value of this signal.
>     
>         Equivalent to calling `self.connect(functools.partial(setattr, obj, attr))`,
>         but with additional weakref safety (i.e. a strong reference to `obj` will not
>         be retained). The return object can be used to
>         [`disconnect()`][psygnal.SignalInstance.disconnect], (or you can use
>         [`disconnect_setattr()`][psygnal.SignalInstance.disconnect_setattr]).
>     
>         Parameters
>         ----------
>         obj : object
>             An object.
>         attr : str
>             The name of an attribute on `obj` that should be set to the value of this
>             signal when emitted.
>         maxargs : Optional[int]
>             max number of positional args to accept
>         on_ref_error: {'raise', 'warn', 'ignore'}, optional
>             What to do if a weak reference cannot be created.  If 'raise', a
>             ReferenceError will be raised.  If 'warn' (default), a warning will be
>             issued and a strong-reference will be used. If 'ignore' a strong-reference
>             will be used (silently).
>         priority : int
>             The priority of the callback. This is used to determine the order in which
>             callbacks are called when multiple are connected to the same signal.
>             Higher priority callbacks are called first. Negative values are allowed.
>             The default is 0.
>     
>         Returns
>         -------
>         Tuple
>             (weakref.ref, name, callable).  Reference to the object, name of the
>             attribute, and setattr closure.  Can be used to disconnect the slot.
>     
>         Raises
>         ------
>         ValueError
>             If this is not a single-value signal
>         AttributeError
>             If `obj` has no attribute `attr`.
>     
>         Examples
>         --------
>         >>> class T:
>         ...     sig = Signal(int)
>         >>> class SomeObj:
>         ...     x = 1
>         >>> t = T()
>         >>> my_obj = SomeObj()
>         >>> t.sig.connect_setattr(my_obj, "x")
>         >>> t.sig.emit(5)
>         >>> assert my_obj.x == 5
>         """
>         if maxargs is _NULL:
> >           warnings.warn(
>                 "The default value of maxargs will change from `None` to `1` in "
>                 "version 0.11. To silence this warning, provide an explicit value for "
>                 "maxargs (`None` for current behavior, `1` for future behavior).",
>                 FutureWarning,
>                 stacklevel=2,
>             )
> E           FutureWarning: The default value of maxargs will change from `None` to `1` in version 0.11. To silence this warning, provide an explicit value for maxargs (`None` for current behavior, `1` for future behavior).
> 
> /usr/lib/python3/dist-packages/psygnal/_signal.py:858: FutureWarning
> =========================== short test summary info ============================
> FAILED tests/test_gui_class.py::test_guiclass - FutureWarning: The default va...
> FAILED tests/test_gui_class.py::test_on_existing_dataclass - FutureWarning: T...
> FAILED tests/test_gui_class.py::test_slots_guiclass - FutureWarning: The defa...
> FAILED tests/test_gui_class.py::test_guiclass_as_class - FutureWarning: The d...
> ============= 4 failed, 278 passed, 33 skipped, 1 xfailed in 7.02s =============
> E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_magicgui/build; python3.11 -m pytest tests
> I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_magicgui/build; python3.12 -m pytest tests
> ============================= test session starts ==============================
> platform linux -- Python 3.12.4, pytest-8.2.2, pluggy-1.5.0
> PyQt5 5.15.10 -- Qt runtime 5.15.13 -- Qt compiled 5.15.13
> rootdir: /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_magicgui/build
> configfile: pyproject.toml
> plugins: xvfb-3.0.0, qt-4.3.1
> collected 313 items / 3 skipped
> 
> tests/test_application.py .                                              [  0%]
> tests/test_backends.py s.........                                        [  3%]
> tests/test_container.py ..............                                   [  7%]
> tests/test_docs.py ss.                                                   [  8%]
> tests/test_factory.py ..........                                         [ 12%]
> tests/test_gui_class.py F.FFF                                            [ 13%]
> tests/test_magicgui.py ...................x............................. [ 29%]
>                                                                          [ 29%]
> tests/test_persistence.py ...                                            [ 30%]
> tests/test_signature.py ....                                             [ 31%]
> tests/test_table.py ............................sss.........             [ 44%]
> tests/test_types.py ...............                                      [ 49%]
> tests/test_ui_field.py s.ss....ss.                                       [ 52%]
> tests/test_widgets.py ......s.s..ss..s.ss..ss.sss.s..s.........s......s. [ 68%]
> s.......s..s............................................................ [ 91%]
> ..........................                                               [100%]
> 
> =================================== FAILURES ===================================
> ________________________________ test_guiclass _________________________________
> 
>     def test_guiclass():
>         """Test that the guiclass decorator works as expected."""
>         mock = Mock()
>     
>         @guiclass
>         class Foo:
>             a: int = 1
>             b: str = "bar"
>     
>             @button
>             def func(self):
>                 mock(asdict(self))
>     
>             # example recommended for type checking
>             if TYPE_CHECKING:
>                 gui: ClassVar[Container]
>                 events: ClassVar[psygnal.SignalGroup]
>     
>         foo = Foo()
>     
>         assert foo.a == 1
>         assert foo.b == "bar"
>     
> >       assert isinstance(foo.gui, Container)
> 
> tests/test_gui_class.py:43: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> magicgui/schema/_guiclass.py:233: in __get__
>     bind_gui_to_instance(wdg, instance)
> magicgui/schema/_guiclass.py:274: in bind_gui_to_instance
>     widget.changed.connect_setattr(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <SignalInstance 'changed' on SpinBox(value=1, annotation=<class 'int'>, name='a')>
> obj = test_guiclass.<locals>.Foo(a=1, b='bar'), attr = 'a'
> maxargs = <object object at 0x7f93cda75e80>
> 
>     def connect_setattr(
>         self,
>         obj: object,
>         attr: str,
>         maxargs: int | None | object = _NULL,
>         *,
>         on_ref_error: RefErrorChoice = "warn",
>         priority: int = 0,
>     ) -> WeakCallback[None]:
>         """Bind an object attribute to the emitted value of this signal.
>     
>         Equivalent to calling `self.connect(functools.partial(setattr, obj, attr))`,
>         but with additional weakref safety (i.e. a strong reference to `obj` will not
>         be retained). The return object can be used to
>         [`disconnect()`][psygnal.SignalInstance.disconnect], (or you can use
>         [`disconnect_setattr()`][psygnal.SignalInstance.disconnect_setattr]).
>     
>         Parameters
>         ----------
>         obj : object
>             An object.
>         attr : str
>             The name of an attribute on `obj` that should be set to the value of this
>             signal when emitted.
>         maxargs : Optional[int]
>             max number of positional args to accept
>         on_ref_error: {'raise', 'warn', 'ignore'}, optional
>             What to do if a weak reference cannot be created.  If 'raise', a
>             ReferenceError will be raised.  If 'warn' (default), a warning will be
>             issued and a strong-reference will be used. If 'ignore' a strong-reference
>             will be used (silently).
>         priority : int
>             The priority of the callback. This is used to determine the order in which
>             callbacks are called when multiple are connected to the same signal.
>             Higher priority callbacks are called first. Negative values are allowed.
>             The default is 0.
>     
>         Returns
>         -------
>         Tuple
>             (weakref.ref, name, callable).  Reference to the object, name of the
>             attribute, and setattr closure.  Can be used to disconnect the slot.
>     
>         Raises
>         ------
>         ValueError
>             If this is not a single-value signal
>         AttributeError
>             If `obj` has no attribute `attr`.
>     
>         Examples
>         --------
>         >>> class T:
>         ...     sig = Signal(int)
>         >>> class SomeObj:
>         ...     x = 1
>         >>> t = T()
>         >>> my_obj = SomeObj()
>         >>> t.sig.connect_setattr(my_obj, "x")
>         >>> t.sig.emit(5)
>         >>> assert my_obj.x == 5
>         """
>         if maxargs is _NULL:
> >           warnings.warn(
>                 "The default value of maxargs will change from `None` to `1` in "
>                 "version 0.11. To silence this warning, provide an explicit value for "
>                 "maxargs (`None` for current behavior, `1` for future behavior).",
>                 FutureWarning,
>                 stacklevel=2,
>             )
> E           FutureWarning: The default value of maxargs will change from `None` to `1` in version 0.11. To silence this warning, provide an explicit value for maxargs (`None` for current behavior, `1` for future behavior).
> 
> /usr/lib/python3/dist-packages/psygnal/_signal.py:858: FutureWarning
> __________________________ test_on_existing_dataclass __________________________
> 
>     def test_on_existing_dataclass():
>         """Test that the guiclass decorator works on pre-existing dataclasses."""
>     
>         @guiclass
>         @dataclass
>         class Foo:
>             a: int = 1
>             b: str = "bar"
>     
>         foo = Foo()
>         assert foo.a == 1
>         assert foo.b == "bar"
> >       assert isinstance(foo.gui, Container)
> 
> tests/test_gui_class.py:83: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> magicgui/schema/_guiclass.py:233: in __get__
>     bind_gui_to_instance(wdg, instance)
> magicgui/schema/_guiclass.py:274: in bind_gui_to_instance
>     widget.changed.connect_setattr(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <SignalInstance 'changed' on SpinBox(value=1, annotation=<class 'int'>, name='a')>
> obj = test_on_existing_dataclass.<locals>.Foo(a=1, b='bar'), attr = 'a'
> maxargs = <object object at 0x7f93cda75e80>
> 
>     def connect_setattr(
>         self,
>         obj: object,
>         attr: str,
>         maxargs: int | None | object = _NULL,
>         *,
>         on_ref_error: RefErrorChoice = "warn",
>         priority: int = 0,
>     ) -> WeakCallback[None]:
>         """Bind an object attribute to the emitted value of this signal.
>     
>         Equivalent to calling `self.connect(functools.partial(setattr, obj, attr))`,
>         but with additional weakref safety (i.e. a strong reference to `obj` will not
>         be retained). The return object can be used to
>         [`disconnect()`][psygnal.SignalInstance.disconnect], (or you can use
>         [`disconnect_setattr()`][psygnal.SignalInstance.disconnect_setattr]).
>     
>         Parameters
>         ----------
>         obj : object
>             An object.
>         attr : str
>             The name of an attribute on `obj` that should be set to the value of this
>             signal when emitted.
>         maxargs : Optional[int]
>             max number of positional args to accept
>         on_ref_error: {'raise', 'warn', 'ignore'}, optional
>             What to do if a weak reference cannot be created.  If 'raise', a
>             ReferenceError will be raised.  If 'warn' (default), a warning will be
>             issued and a strong-reference will be used. If 'ignore' a strong-reference
>             will be used (silently).
>         priority : int
>             The priority of the callback. This is used to determine the order in which
>             callbacks are called when multiple are connected to the same signal.
>             Higher priority callbacks are called first. Negative values are allowed.
>             The default is 0.
>     
>         Returns
>         -------
>         Tuple
>             (weakref.ref, name, callable).  Reference to the object, name of the
>             attribute, and setattr closure.  Can be used to disconnect the slot.
>     
>         Raises
>         ------
>         ValueError
>             If this is not a single-value signal
>         AttributeError
>             If `obj` has no attribute `attr`.
>     
>         Examples
>         --------
>         >>> class T:
>         ...     sig = Signal(int)
>         >>> class SomeObj:
>         ...     x = 1
>         >>> t = T()
>         >>> my_obj = SomeObj()
>         >>> t.sig.connect_setattr(my_obj, "x")
>         >>> t.sig.emit(5)
>         >>> assert my_obj.x == 5
>         """
>         if maxargs is _NULL:
> >           warnings.warn(
>                 "The default value of maxargs will change from `None` to `1` in "
>                 "version 0.11. To silence this warning, provide an explicit value for "
>                 "maxargs (`None` for current behavior, `1` for future behavior).",
>                 FutureWarning,
>                 stacklevel=2,
>             )
> E           FutureWarning: The default value of maxargs will change from `None` to `1` in version 0.11. To silence this warning, provide an explicit value for maxargs (`None` for current behavior, `1` for future behavior).
> 
> /usr/lib/python3/dist-packages/psygnal/_signal.py:858: FutureWarning
> _____________________________ test_slots_guiclass ______________________________
> 
>     @pytest.mark.skipif(sys.version_info < (3, 10), reason="slots are python3.10 or higher")
>     def test_slots_guiclass():
>         """Test that the guiclass decorator works as expected."""
>     
>         psyg_v = tuple(int(x.split("r")[0]) for x in psygnal.__version__.split(".")[:3])
>         old_psygnal = psyg_v < (0, 6, 1)
>     
>         @guiclass(slots=True)
>         class Foo:
>             a: int = 1
>             b: str = "bar"
>     
>         foo = Foo()
>     
>         with (
>             pytest.warns(UserWarning, match="Please update psygnal")
>             if old_psygnal
>             else contextlib.nullcontext()
>         ):
> >           gui = foo.gui
> 
> tests/test_gui_class.py:105: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> magicgui/schema/_guiclass.py:233: in __get__
>     bind_gui_to_instance(wdg, instance)
> magicgui/schema/_guiclass.py:274: in bind_gui_to_instance
>     widget.changed.connect_setattr(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <SignalInstance 'changed' on SpinBox(value=1, annotation=<class 'int'>, name='a')>
> obj = test_slots_guiclass.<locals>.Foo(a=1, b='bar'), attr = 'a'
> maxargs = <object object at 0x7f93cda75e80>
> 
>     def connect_setattr(
>         self,
>         obj: object,
>         attr: str,
>         maxargs: int | None | object = _NULL,
>         *,
>         on_ref_error: RefErrorChoice = "warn",
>         priority: int = 0,
>     ) -> WeakCallback[None]:
>         """Bind an object attribute to the emitted value of this signal.
>     
>         Equivalent to calling `self.connect(functools.partial(setattr, obj, attr))`,
>         but with additional weakref safety (i.e. a strong reference to `obj` will not
>         be retained). The return object can be used to
>         [`disconnect()`][psygnal.SignalInstance.disconnect], (or you can use
>         [`disconnect_setattr()`][psygnal.SignalInstance.disconnect_setattr]).
>     
>         Parameters
>         ----------
>         obj : object
>             An object.
>         attr : str
>             The name of an attribute on `obj` that should be set to the value of this
>             signal when emitted.
>         maxargs : Optional[int]
>             max number of positional args to accept
>         on_ref_error: {'raise', 'warn', 'ignore'}, optional
>             What to do if a weak reference cannot be created.  If 'raise', a
>             ReferenceError will be raised.  If 'warn' (default), a warning will be
>             issued and a strong-reference will be used. If 'ignore' a strong-reference
>             will be used (silently).
>         priority : int
>             The priority of the callback. This is used to determine the order in which
>             callbacks are called when multiple are connected to the same signal.
>             Higher priority callbacks are called first. Negative values are allowed.
>             The default is 0.
>     
>         Returns
>         -------
>         Tuple
>             (weakref.ref, name, callable).  Reference to the object, name of the
>             attribute, and setattr closure.  Can be used to disconnect the slot.
>     
>         Raises
>         ------
>         ValueError
>             If this is not a single-value signal
>         AttributeError
>             If `obj` has no attribute `attr`.
>     
>         Examples
>         --------
>         >>> class T:
>         ...     sig = Signal(int)
>         >>> class SomeObj:
>         ...     x = 1
>         >>> t = T()
>         >>> my_obj = SomeObj()
>         >>> t.sig.connect_setattr(my_obj, "x")
>         >>> t.sig.emit(5)
>         >>> assert my_obj.x == 5
>         """
>         if maxargs is _NULL:
> >           warnings.warn(
>                 "The default value of maxargs will change from `None` to `1` in "
>                 "version 0.11. To silence this warning, provide an explicit value for "
>                 "maxargs (`None` for current behavior, `1` for future behavior).",
>                 FutureWarning,
>                 stacklevel=2,
>             )
> E           FutureWarning: The default value of maxargs will change from `None` to `1` in version 0.11. To silence this warning, provide an explicit value for maxargs (`None` for current behavior, `1` for future behavior).
> 
> /usr/lib/python3/dist-packages/psygnal/_signal.py:858: FutureWarning
> ____________________________ test_guiclass_as_class ____________________________
> 
>     def test_guiclass_as_class():
>         # variant on @guiclass, using class instead of decorator
>         class T2(GuiClass):
>             x: int
>             y: str = "hi"
>     
>             @button
>             def foo(self):
>                 return asdict(self)
>     
>         t2 = T2(1)
>         assert t2.x == 1
>         assert t2.y == "hi"
> >       assert t2.gui.x.value == 1
> 
> tests/test_gui_class.py:141: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> magicgui/schema/_guiclass.py:233: in __get__
>     bind_gui_to_instance(wdg, instance)
> magicgui/schema/_guiclass.py:274: in bind_gui_to_instance
>     widget.changed.connect_setattr(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <SignalInstance 'changed' on SpinBox(value=1, annotation=<class 'int'>, name='x')>
> obj = test_guiclass_as_class.<locals>.T2(x=1, y='hi'), attr = 'x'
> maxargs = <object object at 0x7f93cda75e80>
> 
>     def connect_setattr(
>         self,
>         obj: object,
>         attr: str,
>         maxargs: int | None | object = _NULL,
>         *,
>         on_ref_error: RefErrorChoice = "warn",
>         priority: int = 0,
>     ) -> WeakCallback[None]:
>         """Bind an object attribute to the emitted value of this signal.
>     
>         Equivalent to calling `self.connect(functools.partial(setattr, obj, attr))`,
>         but with additional weakref safety (i.e. a strong reference to `obj` will not
>         be retained). The return object can be used to
>         [`disconnect()`][psygnal.SignalInstance.disconnect], (or you can use
>         [`disconnect_setattr()`][psygnal.SignalInstance.disconnect_setattr]).
>     
>         Parameters
>         ----------
>         obj : object
>             An object.
>         attr : str
>             The name of an attribute on `obj` that should be set to the value of this
>             signal when emitted.
>         maxargs : Optional[int]
>             max number of positional args to accept
>         on_ref_error: {'raise', 'warn', 'ignore'}, optional
>             What to do if a weak reference cannot be created.  If 'raise', a
>             ReferenceError will be raised.  If 'warn' (default), a warning will be
>             issued and a strong-reference will be used. If 'ignore' a strong-reference
>             will be used (silently).
>         priority : int
>             The priority of the callback. This is used to determine the order in which
>             callbacks are called when multiple are connected to the same signal.
>             Higher priority callbacks are called first. Negative values are allowed.
>             The default is 0.
>     
>         Returns
>         -------
>         Tuple
>             (weakref.ref, name, callable).  Reference to the object, name of the
>             attribute, and setattr closure.  Can be used to disconnect the slot.
>     
>         Raises
>         ------
>         ValueError
>             If this is not a single-value signal
>         AttributeError
>             If `obj` has no attribute `attr`.
>     
>         Examples
>         --------
>         >>> class T:
>         ...     sig = Signal(int)
>         >>> class SomeObj:
>         ...     x = 1
>         >>> t = T()
>         >>> my_obj = SomeObj()
>         >>> t.sig.connect_setattr(my_obj, "x")
>         >>> t.sig.emit(5)
>         >>> assert my_obj.x == 5
>         """
>         if maxargs is _NULL:
> >           warnings.warn(
>                 "The default value of maxargs will change from `None` to `1` in "
>                 "version 0.11. To silence this warning, provide an explicit value for "
>                 "maxargs (`None` for current behavior, `1` for future behavior).",
>                 FutureWarning,
>                 stacklevel=2,
>             )
> E           FutureWarning: The default value of maxargs will change from `None` to `1` in version 0.11. To silence this warning, provide an explicit value for maxargs (`None` for current behavior, `1` for future behavior).
> 
> /usr/lib/python3/dist-packages/psygnal/_signal.py:858: FutureWarning
> =========================== short test summary info ============================
> FAILED tests/test_gui_class.py::test_guiclass - FutureWarning: The default va...
> FAILED tests/test_gui_class.py::test_on_existing_dataclass - FutureWarning: T...
> FAILED tests/test_gui_class.py::test_slots_guiclass - FutureWarning: The defa...
> FAILED tests/test_gui_class.py::test_guiclass_as_class - FutureWarning: The d...
> ============= 4 failed, 278 passed, 33 skipped, 1 xfailed in 7.59s =============
> E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_magicgui/build; python3.12 -m pytest tests
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.11 3.12" returned exit code 13


The full build log is available from:
http://qa-logs.debian.net/2024/07/02/magicgui_0.7.2-4_unstable.log

All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20240702;users=lucas@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20240702&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.



Send a report that this bug log contains spam.


Debian bug tracking system administrator <owner@bugs.debian.org>. Last modified: Tue Aug 13 19:11:44 2024; Machine Name: bembo

Debian Bug tracking system

Debbugs is free software and licensed under the terms of the GNU Public License version 2. The current version can be obtained from https://bugs.debian.org/debbugs-source/.

Copyright © 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson, 2005-2017 Don Armstrong, and many other contributors.