Преглед на файлове

add sso hooks (#1854)

* add sso hooks

* add dynamic client port

* webbrowser now open the client_url

* fix tests

* add --client-url cli param

* handle taipy-client-url args
Dinh Long Nguyen преди 7 месеца
родител
ревизия
ec5ec74133
променени са 6 файла, в които са добавени 25 реда и са изтрити 2 реда
  1. 1 1
      taipy/gui/_default_config.py
  2. 8 0
      taipy/gui/_gui_cli.py
  3. 2 0
      taipy/gui/config.py
  4. 6 0
      taipy/gui/gui.py
  5. 7 1
      taipy/gui/server.py
  6. 1 0
      tests/gui/helpers.py

+ 1 - 1
taipy/gui/_default_config.py

@@ -46,7 +46,7 @@ default_config: Config = {
     "change_delay": None,
     "chart_dark_template": None,
     "base_url": "/",
-    "client_url": "http://localhost:5000",
+    "client_url": "http://localhost:{port}",
     "dark_mode": True,
     "dark_theme": None,
     "debug": False,

+ 8 - 0
taipy/gui/_gui_cli.py

@@ -35,6 +35,14 @@ class _GuiCLI(_AbstractCLI):
             "const": "",
             "help": "Specify server host",
         },
+        ("--client-url", "-H"): {
+            "dest": "taipy_client_url",
+            "metavar": "CLIENT_URL",
+            "nargs": "?",
+            "default": "",
+            "const": "",
+            "help": "Specify client url",
+        },
         ("--ngrok-token",): {
             "dest": "taipy_ngrok_token",
             "metavar": "NGROK_TOKEN",

+ 2 - 0
taipy/gui/config.py

@@ -223,6 +223,8 @@ class _Config(object):
             config["upload_folder"] = args.taipy_upload_folder
         elif os.environ.get("TAIPY_GUI_UPLOAD_FOLDER"):
             config["webapp_path"] = os.environ.get("TAIPY_GUI_UPLOAD_FOLDER")
+        if args.taipy_client_url:
+            config["client_url"] = args.taipy_client_url
 
     def _build_config(self, root_dir, env_filename, kwargs):  # pragma: no cover
         config = self.config

+ 6 - 0
taipy/gui/gui.py

@@ -2427,6 +2427,9 @@ class Gui:
             return t.cast(Flask, self._server.get_flask())
         raise RuntimeError("get_flask_app() cannot be invoked before run() has been called.")
 
+    def _get_port(self) -> int:
+        return self._server.get_port()
+
     def _set_frame(self, frame: t.Optional[FrameType]):
         if not isinstance(frame, FrameType):  # pragma: no cover
             raise RuntimeError("frame must be a FrameType where Gui can collect the local variables.")
@@ -2624,6 +2627,8 @@ class Gui:
         # server URL Rule for flask rendered react-router
         pages_bp.add_url_rule(f"/{Gui.__INIT_URL}", view_func=self.__init_route)
 
+        _Hooks()._add_external_blueprint(self, __name__)
+
         # Register Flask Blueprint if available
         for bp in self._flask_blueprint:
             t.cast(Flask, self._server.get_flask()).register_blueprint(bp)
@@ -2790,6 +2795,7 @@ class Gui:
         return self._server.run(
             host=app_config.get("host"),
             port=app_config.get("port"),
+            client_url=app_config.get("client_url"),
             debug=app_config.get("debug"),
             use_reloader=app_config.get("use_reloader"),
             flask_log=app_config.get("flask_log"),

+ 7 - 1
taipy/gui/server.py

@@ -246,6 +246,9 @@ class _Server:
     def get_flask(self):
         return self._flask
 
+    def get_port(self):
+        return self._port
+
     def test_client(self):
         return t.cast(Flask, self._flask).test_client()
 
@@ -286,6 +289,7 @@ class _Server:
         self,
         host,
         port,
+        client_url,
         debug,
         use_reloader,
         flask_log,
@@ -299,6 +303,7 @@ class _Server:
         if port == "auto":
             port = self._get_random_port(port_auto_ranges)
         self._port = port
+        client_url = client_url.format(port=port)
         if _is_in_notebook() and notebook_proxy:  # pragma: no cover
             from .utils.proxy import NotebookProxy
 
@@ -320,8 +325,9 @@ class _Server:
                 _TaipyLogger._get_logger().info(f" * Server starting on http://{host_value}:{port}")
             else:
                 _TaipyLogger._get_logger().info(f" * Server reloaded on http://{host_value}:{port}")
+            _TaipyLogger._get_logger().info(f" * Application is accessible at {client_url}")
         if not is_running_from_reloader() and self._gui._get_config("run_browser", False):
-            webbrowser.open(f"http://{host_value}{f':{port}' if port else ''}", new=2)
+            webbrowser.open(client_url, new=2)
         if _is_in_notebook() or run_in_thread:
             self._thread = KThread(target=self._run_notebook)
             self._thread.start()

+ 1 - 0
tests/gui/helpers.py

@@ -151,6 +151,7 @@ class Helpers:
             gui._server.run(
                 host=gui._get_config("host", "127.0.0.1"),
                 port=gui._get_config("port", 5000),
+                client_url=gui._get_config("client_url", "http://localhost:{port}"),
                 debug=False,
                 use_reloader=False,
                 flask_log=False,