import sys 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() parser.add_argument("--port", type=int) args = parser.parse_args() port: int = args.port if not port: raise ValueError(f"Port of proxy server for Dash not found in {args}.") 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=proxy_base_path ) # define layout app.layout = layout # register all callback functions register_callbacks(app=app) # Run Dash app in the notebook app.run( jupyter_mode="jupyterlab", port=port, host="0.0.0.0", debug=True )