mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-15 14:03:02 +00:00
81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
"""JupyterHub single-user server entrypoints
|
|
|
|
Contains default notebook-app subclass and mixins
|
|
|
|
Defaults to:
|
|
|
|
- Jupyter server extension with Jupyter Server >=2
|
|
- Subclass with Jupyter Server <2 or clasic notebook
|
|
|
|
Application subclass can be controlled with environment variables:
|
|
|
|
- JUPYTERHUB_SINGLEUSER_EXTENSION=1 to opt-in to the extension (requires Jupyter Server 2)
|
|
- JUPYTERHUB_SINGLEUSER_APP=notebook (or jupyter-server) to opt-in
|
|
"""
|
|
import os
|
|
|
|
from .mixins import HubAuthenticatedHandler, make_singleuser_app
|
|
|
|
_as_extension = False
|
|
_extension_env = os.environ.get("JUPYTERHUB_SINGLEUSER_EXTENSION", "")
|
|
_app_env = os.environ.get("JUPYTERHUB_SINGLEUSER_APP", "")
|
|
|
|
if not _extension_env:
|
|
# extension env not set, check app env
|
|
if not _app_env or 'jupyter_server' in _app_env.replace("-", "_"):
|
|
# no app env set or using jupyter-server, this is the default branch
|
|
# default behavior:
|
|
# - extension, if jupyter server 2
|
|
# - older subclass app, otherwise
|
|
try:
|
|
import jupyter_server
|
|
|
|
_server_major = int(jupyter_server.__version__.split(".", 1)[0])
|
|
except Exception:
|
|
# don't have jupyter-server, assume classic notebook
|
|
_as_extension = False
|
|
else:
|
|
# default to extension if jupyter-server >=2
|
|
_as_extension = _server_major >= 2
|
|
|
|
elif _app_env == "extension":
|
|
_as_extension = True
|
|
else:
|
|
# app env set and not to jupyter-server, that opts out of extension
|
|
_as_extension = False
|
|
elif _extension_env == "0":
|
|
_as_extension = False
|
|
else:
|
|
# extension env set to anything non-empty other than '0' enables the extension
|
|
_as_extension = True
|
|
|
|
if _as_extension:
|
|
# check for conflict in singleuser entrypoint environment variables
|
|
if _app_env not in {
|
|
"",
|
|
"jupyter_server",
|
|
"jupyter-server",
|
|
"extension",
|
|
"jupyter_server.serverapp.ServerApp",
|
|
}:
|
|
raise ValueError(
|
|
f"Cannot use JUPYTERHUB_SINGLEUSER_EXTENSION={_extension_env} with JUPYTERHUB_SINGLEUSER_APP={_app_env}."
|
|
" Please pick one or the other."
|
|
)
|
|
from .extension import main
|
|
else:
|
|
from .app import SingleUserNotebookApp, main
|
|
|
|
# backward-compatibility
|
|
JupyterHubLoginHandler = SingleUserNotebookApp.login_handler_class
|
|
JupyterHubLogoutHandler = SingleUserNotebookApp.logout_handler_class
|
|
OAuthCallbackHandler = SingleUserNotebookApp.oauth_callback_handler_class
|
|
|
|
|
|
__all__ = [
|
|
"SingleUserNotebookApp",
|
|
"main",
|
|
"HubAuthenticatedHandler",
|
|
"make_singleuser_app",
|
|
]
|