Browse Source

On_submission_change not in develop mode (#783)

resolves #684

Co-authored-by: Fred Lefévère-Laoide <Fred.Lefevere-Laoide@Taipy.io>
Fred Lefévère-Laoide 1 year ago
parent
commit
6257d20750
2 changed files with 23 additions and 16 deletions
  1. 17 8
      taipy/gui/gui.py
  2. 6 8
      taipy/gui_core/_context.py

+ 17 - 8
taipy/gui/gui.py

@@ -1105,11 +1105,7 @@ class Gui:
     def __broadcast_ws(self, payload: dict, client_id: t.Optional[str] = None):
         try:
             to = list(self.__get_sids(client_id)) if client_id else []
-            self._server._ws.emit(
-                "message",
-                payload,
-                to=to if to else None
-            )
+            self._server._ws.emit("message", payload, to=to if to else None)
             time.sleep(0.001)
         except Exception as e:  # pragma: no cover
             _warn(f"Exception raised in WebSocket communication in '{self.__frame.f_code.co_name}'", e)
@@ -1312,16 +1308,29 @@ class Gui:
         return self._set_locals_context(module_context) if module_context is not None else contextlib.nullcontext()
 
     def _call_user_callback(
-        self, state_id: t.Optional[str], user_callback: t.Callable, args: t.List[t.Any], module_context: t.Optional[str]
+        self,
+        state_id: t.Optional[str],
+        user_callback: t.Union[t.Callable, str],
+        args: t.List[t.Any],
+        module_context: t.Optional[str],
     ) -> t.Any:
         try:
             with self.get_flask_app().app_context():
                 self.__set_client_id_in_context(state_id)
                 with self._set_module_context(module_context):
+                    if not callable(user_callback):
+                        user_callback = self._get_user_function(user_callback)
+                    if not callable(user_callback):
+                        _warn(f"invoke_callback(): {user_callback} is not callable.")
+                        return None
                     return self._call_function_with_state(user_callback, args)
         except Exception as e:  # pragma: no cover
-            if not self._call_on_exception(user_callback.__name__, e):
-                _warn(f"invoke_callback(): Exception raised in '{user_callback.__name__}()'", e)
+            if not self._call_on_exception(user_callback.__name__ if callable(user_callback) else user_callback, e):
+                _warn(
+                    "invoke_callback(): Exception raised in "
+                    + f"'{user_callback.__name__ if callable(user_callback) else user_callback}()'",
+                    e,
+                )
         return None
 
     def _call_broadcast_callback(

+ 6 - 8
taipy/gui_core/_context.py

@@ -178,14 +178,12 @@ class _GuiCoreContext(CoreEventConsumerBase):
                     # callback
                     submission_name = submission.properties.get("on_submission")
                     if submission_name:
-                        submission_fn = self.gui._get_user_function(submission_name)
-                        if callable(submission_fn):
-                            self.gui._call_user_callback(
-                                submission.properties.get("client_id"),
-                                submission_fn,
-                                [core_get(submission.entity_id), {"submission_status": new_status.name}],
-                                submission.properties.get("module_context"),
-                            )
+                        self.gui._call_user_callback(
+                            client_id,
+                            submission_name,
+                            [core_get(submission.entity_id), {"submission_status": new_status.name}],
+                            submission.properties.get("module_context"),
+                        )
 
             with self.submissions_lock:
                 if new_status in (