From 9e2c3de52027c9099b61a360f01cf1972325637d Mon Sep 17 00:00:00 2001
From: Julian <julian@edyoucated.org>
Date: Mon, 11 Mar 2024 22:59:48 +0100
Subject: [PATCH] changed method to find jupyterlab base url for dash app

---
 app/app.py | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/app/app.py b/app/app.py
index 604849e..b43ae3a 100644
--- a/app/app.py
+++ b/app/app.py
@@ -4,13 +4,25 @@ sys.path.append("/home/jovyan/")
 import argparse
 import logging
 
+from urllib.parse import urlparse, urljoin
+
 from dash import Dash
 
+from jupyter_server.serverapp import list_running_servers
+
 from layout import layout
 from callbacks import register_callbacks
 
 logging.basicConfig(level=logging.INFO)
 
+# weird trick to find base_url for the jupyterlab
+def find_jupyterlab_base_url():
+    servers = list_running_servers()
+    for server in servers:
+        if server["port"] == 8888:
+            return server['url']
+    return None
+
 
 # get the correct port from proxy
 parser = argparse.ArgumentParser()
@@ -23,10 +35,19 @@ if not port:
 else: 
     logging.debug(f"Dash app running on port {port}.")
 
+
+base_url = find_jupyterlab_base_url()
+if base_url is None:
+    raise ValueError("Base URL of Jupyterlab could not be detected.")
+logging.debug(f"Base URL: {base_url}")
+
+proxy_base_path = urlparse(urljoin(base_url + "/", f"proxy/{port}/")).path
+logging.debug(f"Proxy base path: {proxy_base_path}")
+
 # define Dash app
 app = Dash(
     name=__name__, 
-    requests_pathname_prefix="/Dash/"
+    requests_pathname_prefix=proxy_base_path
 )
 
 # define layout
@@ -39,6 +60,6 @@ register_callbacks(app=app)
 app.run(
     jupyter_mode="jupyterlab", 
     port=port, 
-    host="localhost",
+    host="0.0.0.0",
     debug=True
 )
-- 
GitLab