From 14156554324c61d99f4ddd7fdd4b1174578ac61e Mon Sep 17 00:00:00 2001 From: Iisakki Rotko Date: Fri, 22 Nov 2024 11:31:44 +0100 Subject: [PATCH] fix: detach on_msg handler on widget/template close This improves performance slightly, since we don't have to wait for garbage collection. --- ipyvue/VueTemplateWidget.py | 7 +++++++ ipyvue/VueWidget.py | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/ipyvue/VueTemplateWidget.py b/ipyvue/VueTemplateWidget.py index 54b00c2..c09930c 100644 --- a/ipyvue/VueTemplateWidget.py +++ b/ipyvue/VueTemplateWidget.py @@ -59,6 +59,9 @@ def resolve_ref(value): else: getattr(self, "vue_" + event)(data) + def _clear_event_handler(self): + self.on_msg(self._handle_event, remove=True) + def _value_to_json(x, obj): if inspect.isclass(x): @@ -164,5 +167,9 @@ def on_ref_source_change(change): for traitlet in sync_ref_traitlets: create_ref_and_observe(traitlet) + def close(self): + self._clear_event_handler() + super().close() + __all__ = ["VueTemplate"] diff --git a/ipyvue/VueWidget.py b/ipyvue/VueWidget.py index 465f6a7..7562996 100644 --- a/ipyvue/VueWidget.py +++ b/ipyvue/VueWidget.py @@ -130,6 +130,9 @@ def _handle_event(self, _, content, buffers): data = content.get("data", {}) self._fire_event(event, data) + def _clear_event_handler(self): + self.on_msg(self._handle_event, remove=True) + class VueWidget(DOMWidget, Events): # we can drop this when https://github.com/jupyter-widgets/ipywidgets/pull/3592 @@ -192,5 +195,9 @@ def hide(self): self.class_list.add("d-none") + def close(self): + self._clear_event_handler() + super().close() + __all__ = ["VueWidget"]