Skip to content
Snippets Groups Projects
Commit b21745b0 authored by Julian's avatar Julian
Browse files

include conditional MyApp proxy for dash

parent 783fe058
No related branches found
No related tags found
2 merge requests!6Finalized Jupyterlab for the sprint,!4Dev
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
try:
from my_layout import layout
from my_callbacks import register_callbacks
except ModuleNotFoundError:
# do not let Dash start
exit()
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
)
def setup_my_app_proxy():
command = [
'python',
'/dash/app/my_app.py',
'--port',
'{port}'
]
return {
"command": command,
"new_browser_tab": False,
"launcher_entry": {
"enabled": True,
'title': 'MyApp'
}
}
...@@ -5,11 +5,12 @@ setuptools.setup( ...@@ -5,11 +5,12 @@ setuptools.setup(
author_email="julian.rasch@fh-muenster.de", author_email="julian.rasch@fh-muenster.de",
description="A small module to run Dash inside a dockerized Jupyterlab.", description="A small module to run Dash inside a dockerized Jupyterlab.",
name="jupyter-dash-proxy", name="jupyter-dash-proxy",
py_modules=["dash_proxy"], py_modules=["dash_proxy", "my_app_proxy"],
entry_points={ entry_points={
"jupyter_serverproxy_servers": [ "jupyter_serverproxy_servers": [
# name = packagename:function_name # name = packagename:function_name
"Dash = dash_proxy:setup_dash_proxy", "Dash = dash_proxy:setup_dash_proxy",
"MyApp = my_app_proxy:setup_my_app_proxy"
] ]
}, },
install_requires=["jupyter-server-proxy==4.0.0"], install_requires=["jupyter-server-proxy==4.0.0"],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment