Skip to content

Commit 8e05944

Browse files
author
Alan
committed
Merge branch 'weakref' into combine_v1
2 parents 12cafe1 + 1243f70 commit 8e05944

File tree

1 file changed

+23
-3
lines changed
  • python/ipywidgets/ipywidgets/widgets

1 file changed

+23
-3
lines changed

python/ipywidgets/ipywidgets/widgets/widget.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -422,9 +422,12 @@ def get_manager_state(cls, drop_defaults=False, widgets=None):
422422
"""
423423
state = {}
424424
if widgets is None:
425-
widgets = _widget_instances.values()
425+
widgets = tuple(_widget_instances.values())
426426
for widget in widgets:
427-
state[widget.model_id] = widget._get_embed_state(drop_defaults=drop_defaults)
427+
try:
428+
state[widget.model_id] = widget._get_embed_state(drop_defaults=drop_defaults)
429+
except Exception:
430+
pass
428431
return {'version_major': 2, 'version_minor': 0, 'state': state}
429432

430433
def _get_embed_state(self, drop_defaults=False):
@@ -621,7 +624,24 @@ def get_state(self, key=None, drop_defaults=False):
621624
traits = self.traits()
622625
for k in keys:
623626
to_json = self.trait_metadata(k, 'to_json', self._trait_to_json)
624-
value = to_json(getattr(self, k), self)
627+
try:
628+
value = to_json(getattr(self, k), self)
629+
except RuntimeError as e:
630+
if k == "children" and isinstance((children := getattr(self, k)), tuple):
631+
# A special case to handle invalid children
632+
children_ = []
633+
for c in children:
634+
try:
635+
to_json(c, self)
636+
except Exception:
637+
self.log.debug("Dropping invalid child item:%r", c)
638+
continue
639+
else:
640+
children_.append(c)
641+
value = to_json(children_, self)
642+
else:
643+
self.log.exception("Unable to trait %s from %r", k, self, exc_info=e)
644+
continue
625645
if not drop_defaults or not self._compare(value, traits[k].default_value):
626646
state[k] = value
627647
return state

0 commit comments

Comments
 (0)