Skip to content

Commit 46e6e35

Browse files
committed
Make the new register decorator backwards compatible, with a deprecation warning.
1 parent c9d8088 commit 46e6e35

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

docs/source/changelog.md

+5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ Major user-visible changes in ipywidgets 7.0 include:
1010

1111
- The `Label` widget is now right-aligned and has no width restriction: [#1269](https://github.com/jupyter-widgets/ipywidgets/pull/1269)
1212

13+
14+
Major changes developers should be aware of include:
15+
16+
- The python `@register` decorator for widget classes no longer takes a string argument, but registers a widget class using the `_model_*` and `_view_*` traits in the class. Using the decorator as `@register('name')` is deprecated and should be changed to just `@register`. [#1228](https://github.com/jupyter-widgets/ipywidgets/pull/1228), [#1276](https://github.com/jupyter-widgets/ipywidgets/pull/1276)
17+
1318
6.0
1419
---
1520

ipywidgets/widgets/widget.py

+19-11
Original file line numberDiff line numberDiff line change
@@ -213,17 +213,25 @@ def get(self, model_module, model_module_version, model_name, view_module, view_
213213
widget_class = view_names[view_name]
214214
return widget_class
215215

216-
def register(widget):
217-
"""A decorator registering a widget class in the widget registry."""
218-
w = widget.class_traits()
219-
Widget.widget_types.register(w['_model_module'].default_value,
220-
w['_model_module_version'].default_value,
221-
w['_model_name'].default_value,
222-
w['_view_module'].default_value,
223-
w['_view_module_version'].default_value,
224-
w['_view_name'].default_value,
225-
widget)
226-
return widget
216+
def register(name=''):
217+
"For backwards compatibility, we support @register(name) syntax."
218+
def reg(widget):
219+
"""A decorator registering a widget class in the widget registry."""
220+
w = widget.class_traits()
221+
Widget.widget_types.register(w['_model_module'].default_value,
222+
w['_model_module_version'].default_value,
223+
w['_model_name'].default_value,
224+
w['_view_module'].default_value,
225+
w['_view_module_version'].default_value,
226+
w['_view_name'].default_value,
227+
widget)
228+
return widget
229+
if isinstance(name, string_types):
230+
import warnings
231+
warnings.warn("Widget registration using a string name has been deprecated. Widget registration now uses a plain `@register` decorator.", DeprecationWarning)
232+
return reg
233+
else:
234+
return reg(name)
227235

228236
class Widget(LoggingHasTraits):
229237
#-------------------------------------------------------------------------

0 commit comments

Comments
 (0)