Do not allow call_function callback argument to be added afterwards (#4552)

The default behavior for EventSpec is to treat the spec as a partial, wherein
if additional unfilled arguments are available, and the event trigger wants to
pass additional arguments, they will be applied positionally.

However, it never makes sense to fill in `callback` with an event trigger arg.
Therefore, if the callback is not provided initially, set it to None explicitly
so that some invalid value cannot be added later.
This commit is contained in:
Masen Furer 2025-01-03 15:50:01 -08:00 committed by GitHub
parent 8477a1aba0
commit 316a0c9bde
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 5 deletions

View File

@ -1190,7 +1190,7 @@ def call_function(
Returns:
EventSpec: An event that will execute the client side javascript.
"""
callback_kwargs = {}
callback_kwargs = {"callback": None}
if callback is not None:
callback_kwargs = {
"callback": format.format_queue_events(

View File

@ -223,12 +223,17 @@ def test_event_console_log():
)
assert (
format.format_event(spec)
== 'Event("_call_function", {function:(() => (console["log"]("message")))})'
== 'Event("_call_function", {function:(() => (console["log"]("message"))),callback:null})'
)
spec = event.console_log(Var(_js_expr="message"))
assert (
format.format_event(spec)
== 'Event("_call_function", {function:(() => (console["log"](message)))})'
== 'Event("_call_function", {function:(() => (console["log"](message))),callback:null})'
)
spec2 = event.console_log(Var(_js_expr="message2")).add_args(Var("throwaway"))
assert (
format.format_event(spec2)
== 'Event("_call_function", {function:(() => (console["log"](message2))),callback:null})'
)
@ -243,12 +248,17 @@ def test_event_window_alert():
)
assert (
format.format_event(spec)
== 'Event("_call_function", {function:(() => (window["alert"]("message")))})'
== 'Event("_call_function", {function:(() => (window["alert"]("message"))),callback:null})'
)
spec = event.window_alert(Var(_js_expr="message"))
assert (
format.format_event(spec)
== 'Event("_call_function", {function:(() => (window["alert"](message)))})'
== 'Event("_call_function", {function:(() => (window["alert"](message))),callback:null})'
)
spec2 = event.window_alert(Var(_js_expr="message2")).add_args(Var("throwaway"))
assert (
format.format_event(spec2)
== 'Event("_call_function", {function:(() => (window["alert"](message2))),callback:null})'
)