Source: magicgui
Version: 0.7.2-4
Severity: serious
Justification: FTBFS
Tags: trixie sid ftbfs
User: lu...@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=lu...@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20240702&fusertaguser=lu...@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.

Reply via email to