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

@@ -35,4 +35,8 @@ def tljh_config_post_install(config):
# Put an arbitrary marker we can test for # Put an arbitrary marker we can test for
config['simplest_plugin'] = { config['simplest_plugin'] = {
'present': True 'present': True
} }
@hookimpl
def tljh_custom_jupyterhub_config(c):
c.JupyterHub.authenticator_class = 'tmpauthenticator.TmpAuthenticator'

View File

@@ -2,6 +2,7 @@
Test simplest plugin Test simplest plugin
""" """
from ruamel.yaml import YAML from ruamel.yaml import YAML
import requests
import os import os
import subprocess import subprocess
from tljh.config import CONFIG_FILE, USER_ENV_PREFIX, HUB_ENV_PREFIX from tljh.config import CONFIG_FILE, USER_ENV_PREFIX, HUB_ENV_PREFIX
@@ -52,3 +53,11 @@ def test_config_hook():
data = yaml.load(f) data = yaml.load(f)
assert data['simplest_plugin']['present'] 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 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 @hookspec
def tljh_config_post_install(config): def tljh_config_post_install(config):

View File

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