Skip to content
Snippets Groups Projects
Forked from Michael Bücker / jupyterhub
65 commits behind, 20 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
app.py 1.44 KiB
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
)