Files
jupyterhub/jupyterhub/singleuser/__init__.py

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",
]