From 05581667b1b7820306817dc84c109878d389bbe5 Mon Sep 17 00:00:00 2001 From: ianhi Date: Mon, 15 Feb 2021 21:52:13 -0500 Subject: [PATCH 1/2] privatize the dict of all active widgets --- ipywidgets/embed.py | 4 ++-- ipywidgets/tests/test_embed.py | 2 +- ipywidgets/widgets/widget.py | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ipywidgets/embed.py b/ipywidgets/embed.py index d71f5993db..0914a7851b 100644 --- a/ipywidgets/embed.py +++ b/ipywidgets/embed.py @@ -129,7 +129,7 @@ def _get_recursive_state(widget, store=None, drop_defaults=False): def add_resolved_links(store, drop_defaults): """Adds the state of any link models between two models in store""" - for widget_id, widget in Widget.widgets.items(): # go over all widgets + for widget_id, widget in Widget._active_widgets.items(): # go over all widgets if isinstance(widget, Link) and widget_id not in store: if widget.source[0].model_id in store and widget.target[0].model_id in store: store[widget.model_id] = widget._get_embed_state(drop_defaults=drop_defaults) @@ -207,7 +207,7 @@ def embed_data(views, drop_defaults=True, state=None): view_specs: a list of widget view specs """ if views is None: - views = [w for w in Widget.widgets.values() if isinstance(w, DOMWidget)] + views = [w for w in Widget._active_widgets.values() if isinstance(w, DOMWidget)] else: try: views[0] diff --git a/ipywidgets/tests/test_embed.py b/ipywidgets/tests/test_embed.py index 24fbb9e4c4..cc2f772028 100644 --- a/ipywidgets/tests/test_embed.py +++ b/ipywidgets/tests/test_embed.py @@ -29,7 +29,7 @@ class CaseWidget(Widget): class TestEmbed: def teardown(self): - for w in tuple(Widget.widgets.values()): + for w in tuple(Widget._active_widgets.values()): w.close() def test_embed_data_simple(self): diff --git a/ipywidgets/widgets/widget.py b/ipywidgets/widgets/widget.py index f185c22fc6..1ab9a7f650 100644 --- a/ipywidgets/widgets/widget.py +++ b/ipywidgets/widgets/widget.py @@ -35,8 +35,8 @@ def _json_to_widget(x, obj): return {k: _json_to_widget(v, obj) for k, v in x.items()} elif isinstance(x, (list, tuple)): return [_json_to_widget(v, obj) for v in x] - elif isinstance(x, str) and x.startswith('IPY_MODEL_') and x[10:] in Widget.widgets: - return Widget.widgets[x[10:]] + elif isinstance(x, str) and x.startswith('IPY_MODEL_') and x[10:] in Widget._active_widgets: + return Widget._active_widgets[x[10:]] else: return x @@ -263,8 +263,8 @@ class Widget(LoggingHasTraits): #------------------------------------------------------------------------- _widget_construction_callback = None - # widgets is a dictionary of all active widget objects - widgets = {} + # _active_widgets is a dictionary of all active widget objects + _active_widgets = {} # widget_types is a registry of widgets by module, version, and name: widget_types = WidgetRegistry() @@ -320,7 +320,7 @@ def get_manager_state(drop_defaults=False, widgets=None): """ state = {} if widgets is None: - widgets = Widget.widgets.values() + widgets = Widget._active_widgets.values() for widget in widgets: state[widget.model_id] = widget._get_embed_state(drop_defaults=drop_defaults) return {'version_major': 2, 'version_minor': 0, 'state': state} @@ -416,7 +416,7 @@ def _comm_changed(self, change): self._model_id = self.model_id self.comm.on_msg(self._handle_msg) - Widget.widgets[self.model_id] = self + Widget._active_widgets[self.model_id] = self @property def model_id(self): @@ -436,7 +436,7 @@ def close(self): When the comm is closed, all of the widget views are automatically removed from the front-end.""" if self.comm is not None: - Widget.widgets.pop(self.model_id, None) + Widget._active_widgets.pop(self.model_id, None) self.comm.close() self.comm = None self._repr_mimebundle_ = None From 8fdf0209c355ee9bca017f8f6181b8eeea6d983d Mon Sep 17 00:00:00 2001 From: ianhi Date: Mon, 15 Feb 2021 21:54:35 -0500 Subject: [PATCH 2/2] privatize widget_types registry --- ipywidgets/widgets/widget.py | 8 ++++---- packages/schema/generate-spec.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ipywidgets/widgets/widget.py b/ipywidgets/widgets/widget.py index 1ab9a7f650..4b495b9c50 100644 --- a/ipywidgets/widgets/widget.py +++ b/ipywidgets/widgets/widget.py @@ -247,7 +247,7 @@ def items(self): def register(widget): """A decorator registering a widget class in the widget registry.""" w = widget.class_traits() - Widget.widget_types.register(w['_model_module'].default_value, + Widget._widget_types.register(w['_model_module'].default_value, w['_model_module_version'].default_value, w['_model_name'].default_value, w['_view_module'].default_value, @@ -266,8 +266,8 @@ class Widget(LoggingHasTraits): # _active_widgets is a dictionary of all active widget objects _active_widgets = {} - # widget_types is a registry of widgets by module, version, and name: - widget_types = WidgetRegistry() + # _widget_types is a registry of widgets by module, version, and name: + _widget_types = WidgetRegistry() @classmethod def close_all(cls): @@ -299,7 +299,7 @@ def handle_comm_opened(comm, msg): state = data['state'] # Find the widget class to instantiate in the registered widgets - widget_class = Widget.widget_types.get(state['_model_module'], + widget_class = Widget._widget_types.get(state['_model_module'], state['_model_module_version'], state['_model_name'], state['_view_module'], diff --git a/packages/schema/generate-spec.py b/packages/schema/generate-spec.py index d417ca2e68..29b422ba62 100644 --- a/packages/schema/generate-spec.py +++ b/packages/schema/generate-spec.py @@ -199,7 +199,7 @@ def create_markdown(spec): args = parser.parse_args() format = args.format - widgets_to_document = sorted(widgets.Widget.widget_types.items()) + widgets_to_document = sorted(widgets.Widget._widget_types.items()) spec = create_spec(widgets_to_document) if format == 'json': print(json.dumps(spec, sort_keys=True))