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):
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.
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.