Skip to content

Commit

Permalink
Fix reuse of magic factory (#224)
Browse files Browse the repository at this point in the history
* fix reuse of magic factory

* add test

* skip persistence test on Win CI
  • Loading branch information
tlambert03 committed Apr 27, 2021
1 parent 279bb3b commit 116dedb
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 3 deletions.
5 changes: 3 additions & 2 deletions magicgui/_magicgui.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,9 +198,10 @@ def __call__(self, *args, **kwargs):
if args:
raise ValueError("MagicFactory instance only accept keyword arguments")
params = inspect.signature(magicgui).parameters
prm_options = self.keywords.pop("param_options", {})
factory_kwargs = self.keywords.copy()
prm_options = factory_kwargs.pop("param_options", {})
prm_options.update({k: kwargs.pop(k) for k in list(kwargs) if k not in params})
widget = self.func(param_options=prm_options, **{**self.keywords, **kwargs})
widget = self.func(param_options=prm_options, **{**factory_kwargs, **kwargs})
if self._widget_init is not None:
self._widget_init(widget)
return widget
Expand Down
17 changes: 16 additions & 1 deletion tests/test_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from magicgui import magic_factory
from magicgui._magicgui import MagicFactory
from magicgui.widgets import FunctionGui, Slider
from magicgui.widgets import ComboBox, FunctionGui, Slider


def test_magic_factory():
Expand Down Expand Up @@ -32,6 +32,21 @@ def factory(x: int = 1):
assert widget1(3) == 3


def test_magic_factory_reuse():
"""Test magic_factory can be reused."""

@magic_factory(x={"choices": ["a", "b"]})
def factory(x="a"):
return x

# there was an earlier bug that overrode widget parameters. this tests for that
widget_a = factory()
assert isinstance(widget_a.x, ComboBox)

widget_b = factory()
assert isinstance(widget_b.x, ComboBox)


def test_magic_factory_repr():
"""Test basic magic_factory behavior."""

Expand Down
5 changes: 5 additions & 0 deletions tests/test_persistence.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
import sys
import time
from unittest.mock import patch

Expand All @@ -22,6 +23,10 @@ def test_user_cache_dir():
assert str(ucd) == str(home / ".cache" / "magicgui")


@pytest.mark.skipif(
bool(sys.platform == "win32" and sys.version_info >= (3, 9)),
reason="persistence test failing on CI",
)
def test_persistence(tmp_path):
"""Test that we can persist values across instances."""

Expand Down

0 comments on commit 116dedb

Please sign in to comment.