From 21a7f75ade6c907e628903d0fe3e9e407430eb63 Mon Sep 17 00:00:00 2001 From: Min RK Date: Mon, 19 Jan 2015 16:01:18 -0800 Subject: [PATCH 1/2] Don't use widget.description as kwarg key in interact. description can be set manually, so it cannot be relied upon to store the kwarg key. Add a `widget._kwarg` attribute instead. --- IPython/html/widgets/interaction.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IPython/html/widgets/interaction.py b/IPython/html/widgets/interaction.py index 7a3a7896e..d21f12f30 100644 --- a/IPython/html/widgets/interaction.py +++ b/IPython/html/widgets/interaction.py @@ -155,6 +155,7 @@ def _widgets_from_abbreviations(seq): widget = _widget_from_abbrev(abbrev, default) if not widget.description: widget.description = name + widget._kwarg = name result.append(widget) return result @@ -194,7 +195,7 @@ def interactive(__interact_f, **kwargs): container.kwargs = {} for widget in kwargs_widgets: value = widget.value - container.kwargs[widget.description] = value + container.kwargs[widget._kwarg] = value if co: clear_output(wait=True) if manual: From 0f6685acf0e14647145d1c5fe14bae6460a742db Mon Sep 17 00:00:00 2001 From: Min RK Date: Mon, 19 Jan 2015 16:17:04 -0800 Subject: [PATCH 2/2] test that custom description doesn't change kwarg --- IPython/html/widgets/tests/test_interaction.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/IPython/html/widgets/tests/test_interaction.py b/IPython/html/widgets/tests/test_interaction.py index 023edcb1d..774b25ce8 100644 --- a/IPython/html/widgets/tests/test_interaction.py +++ b/IPython/html/widgets/tests/test_interaction.py @@ -489,13 +489,20 @@ def test_default_description(): ) def test_custom_description(): - c = interactive(f, b=widgets.Text(value='text', description='foo')) + d = {} + def record_kwargs(**kwargs): + d.clear() + d.update(kwargs) + + c = interactive(record_kwargs, b=widgets.Text(value='text', description='foo')) w = c.children[0] check_widget(w, cls=widgets.Text, value='text', description='foo', ) + w.value = 'different text' + nt.assert_equal(d, {'b': 'different text'}) def test_interact_manual_button(): c = interactive(f, __manual=True)