Add post-spawn hook

This commit is contained in:
James Curtin
2018-05-04 19:56:34 -04:00
parent 10ea92dcea
commit 2f3f8d7826
4 changed files with 32 additions and 3 deletions

View File

@@ -25,8 +25,11 @@ Another use would be to copy initial content, such as tutorial files or referenc
You can define your own bootstrap process by implementing a `pre_spawn_hook` on any spawner.
The Spawner itself is passed as parameter to your hook and you can easily get the contextual information out of the spawning process.
If you implement a hook, make sure that it is *idempotent*. It will be executed every time
a notebook server is spawned to the user. That means you should somehow
Similarly, there may be cases where you would like to clean up after a spawner stops.
You may implement a `post_spawn_hook` that is always executed after the spawner stops.
If you implement a hook, make sure that it is *idempotent*. It will be executed every time
a notebook server is spawned to the user. That means you should somehow
ensure that things which should run only once are not running again and again.
For example, before you create a directory, check if it exists.

View File

@@ -2,6 +2,7 @@
# create a directory for the user before the spawner starts
import os
import shutil
def create_dir_hook(spawner):
username = spawner.user.name # get the username
volume_path = os.path.join('/volumes/jupyterhub', username)
@@ -10,8 +11,15 @@ def create_dir_hook(spawner):
# now do whatever you think your user needs
# ...
# attach the hook function to the spawner
def clean_dir_hook(spawner):
username = spawner.user.name # get the username
temp_path = os.path.join('/volumes/jupyterhub', username, 'temp')
if os.path.exists(temp_path) and os.path.isdir(temp_path):
shutil.rmtree(temp_path)
# attach the hook functions to the spawner
c.Spawner.pre_spawn_hook = create_dir_hook
c.Spawner.post_spawn_hook = clean_dir_hook
# Use the DockerSpawner to serve your users' notebooks
c.JupyterHub.spawner_class = 'dockerspawner.DockerSpawner'