diff --git a/jupyterhub/handlers/base.py b/jupyterhub/handlers/base.py index 11b5f17c..e749731d 100644 --- a/jupyterhub/handlers/base.py +++ b/jupyterhub/handlers/base.py @@ -452,12 +452,12 @@ class UserSpawnHandler(BaseHandler): # spawn has supposedly finished, check on the status status = yield current_user.spawner.poll() if status is not None: - if self.spawner_class.options_form: + if current_user.spawner.options_form: self.redirect(url_path_join(self.hub.server.base_url, 'spawn')) else: yield self.spawn_single_user(current_user) else: - if self.spawner_class.options_form: + if current_user.spawner.options_form: self.redirect(url_path_join(self.hub.server.base_url, 'spawn')) else: yield self.spawn_single_user(current_user) diff --git a/jupyterhub/handlers/login.py b/jupyterhub/handlers/login.py index 32a7e3ef..8ab9a1bb 100644 --- a/jupyterhub/handlers/login.py +++ b/jupyterhub/handlers/login.py @@ -68,7 +68,7 @@ class LoginHandler(BaseHandler): if user.spawner: status = yield user.spawner.poll() already_running = (status == None) - if not already_running and not self.spawner_class.options_form: + if not already_running and not user.spawner.options_form: yield self.spawn_single_user(user) self.set_login_cookie(user) next_url = self.get_argument('next', default='') diff --git a/jupyterhub/handlers/pages.py b/jupyterhub/handlers/pages.py index 3b3ecaaa..fcd66cb0 100644 --- a/jupyterhub/handlers/pages.py +++ b/jupyterhub/handlers/pages.py @@ -63,10 +63,10 @@ class SpawnHandler(BaseHandler): self.log.debug("User is running: %s", url) self.redirect(url) return - if self.spawner_class.options_form: + if user.spawner.options_form: html = self.render_template('spawn.html', user=self.get_current_user(), - spawner_options_form=self.spawner_class.options_form, + spawner_options_form=user.spawner.options_form, ) self.finish(html) else: @@ -87,7 +87,7 @@ class SpawnHandler(BaseHandler): form_options = {} for key, byte_list in self.request.body_arguments.items(): form_options[key] = [ bs.decode('utf8') for bs in byte_list ] - options = self.spawner_class.options_from_form(form_options) + options = user.spawner.options_from_form(form_options) yield self.spawn_single_user(user, options=options) url = user.server.base_url self.redirect(url) diff --git a/jupyterhub/spawner.py b/jupyterhub/spawner.py index 1d7958a1..5870b822 100644 --- a/jupyterhub/spawner.py +++ b/jupyterhub/spawner.py @@ -73,24 +73,33 @@ class Spawner(LoggingConfigurable): help="Enable debug-logging of the single-user server" ) - # options_form is a class attribute, defining an HTML form snippet, - # which can be used to specify whether - # (i.e. just the elements, not submit button or the