Skip to content

Commit 793cbb1

Browse files
fix: vue component with default event handler values were serializated
The default event handler values were attempted to serialized since they were added as a trait with a default value. This was causing the serialization to fail since the default value was not a valid JSON (it is a Python function)
1 parent d951de2 commit 793cbb1

1 file changed

Lines changed: 8 additions & 7 deletions

File tree

‎solara/components/component_vue.py‎

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,24 @@ def _widget_from_signature(classname, base_class: Type[widgets.Widget], func: Ca
2020
if name.startswith("event_"):
2121
event_name = name[6:]
2222

23-
def event_handler(self, data, buffers=None, event_name=event_name):
24-
callback = self._event_callbacks.get(event_name)
23+
def event_handler(self, data, buffers=None, event_name=event_name, param=param):
24+
callback = self._event_callbacks.get(event_name, param.default)
2525
if callback:
2626
if buffers:
2727
callback(data, buffers)
2828
else:
2929
callback(data)
3030

3131
classprops[f"vue_{event_name}"] = event_handler
32-
if name.startswith("on_") and name[3:] in parameters:
32+
elif name.startswith("on_") and name[3:] in parameters:
3333
# callback, will be handled by reacton
3434
continue
35-
if param.default == inspect.Parameter.empty:
36-
trait = traitlets.Any()
3735
else:
38-
trait = traitlets.Any(default_value=param.default)
39-
classprops[name] = trait.tag(sync=True, **widgets.widget_serialization)
36+
if param.default == inspect.Parameter.empty:
37+
trait = traitlets.Any()
38+
else:
39+
trait = traitlets.Any(default_value=param.default)
40+
classprops[name] = trait.tag(sync=True, **widgets.widget_serialization)
4041
# maps event_foo to a callable
4142
classprops["_event_callbacks"] = traitlets.Dict(default_value={})
4243

0 commit comments

Comments
 (0)