瀏覽代碼

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.
Masen Furer 4 月之前
父節點
當前提交
316a0c9bde
共有 2 個文件被更改,包括 15 次插入5 次删除
  1. 1 1
      reflex/event.py
  2. 14 4
      tests/units/test_event.py

+ 1 - 1
reflex/event.py

@@ -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(

+ 14 - 4
tests/units/test_event.py

@@ -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})'
     )