Add hook for custom jupyterhub_config.py content

This lets extensions directly control how JupyterHub
is configured
This commit is contained in:
yuvipanda
2019-05-31 23:35:08 -07:00
parent 77dc6a0e27
commit b584bd1b2a
4 changed files with 27 additions and 2 deletions

View File

@@ -36,3 +36,7 @@ def tljh_config_post_install(config):
config['simplest_plugin'] = {
'present': True
}
@hookimpl
def tljh_custom_jupyterhub_config(c):
c.JupyterHub.authenticator_class = 'tmpauthenticator.TmpAuthenticator'

View File

@@ -2,6 +2,7 @@
Test simplest plugin
"""
from ruamel.yaml import YAML
import requests
import os
import subprocess
from tljh.config import CONFIG_FILE, USER_ENV_PREFIX, HUB_ENV_PREFIX
@@ -52,3 +53,11 @@ def test_config_hook():
data = yaml.load(f)
assert data['simplest_plugin']['present']
def test_jupyterhub_config_hook():
"""
Test that tmpauthenticator is enabled by our custom config plugin
"""
resp = requests.get('http://localhost/hub/tmplogin', allow_redirects=False)
assert resp.status_code == 302
assert resp.headers['Location'] == '/hub/spawn'

View File

@@ -38,6 +38,15 @@ def tljh_extra_apt_packages():
"""
pass
@hookspec
def tljh_custom_jupyterhub_config(c):
"""
Provide custom traitlet based config to JupyterHub.
Anything you can put in `jupyterhub_config.py` can
be here.
"""
pass
@hookspec
def tljh_config_post_install(config):

View File

@@ -6,7 +6,7 @@ from glob import glob
import os
from systemdspawner import SystemdSpawner
from tljh import configurer, user
from tljh import configurer, user, hooks
from tljh.config import INSTALL_PREFIX, USER_ENV_PREFIX, CONFIG_DIR
from tljh.normalize import generate_system_username
from tljh.yaml import yaml
@@ -57,6 +57,9 @@ c.SystemdSpawner.unit_name_template = 'jupyter-{USERNAME}'
tljh_config = configurer.load_config()
configurer.apply_config(tljh_config, c)
# Let TLJH hooks modify `c` if they want
hooks.tljh_custom_jupyterhub_config(c)
# Load arbitrary .py config files if they exist.
# This is our escape hatch
extra_configs = sorted(glob(os.path.join(CONFIG_DIR, 'jupyterhub_config.d', '*.py')))