From bc86ee1c317cb6d1da83edbade4f51a9e028d28e Mon Sep 17 00:00:00 2001 From: Haw-minn Lu Date: Fri, 27 Apr 2018 15:58:59 -0700 Subject: [PATCH 1/5] Add custom handlers and allow setting of defaults --- jupyterhub/app.py | 11 +++++++++++ jupyterhub/handlers/base.py | 10 ++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/jupyterhub/app.py b/jupyterhub/app.py index 29e23ef0..bf2c38f3 100644 --- a/jupyterhub/app.py +++ b/jupyterhub/app.py @@ -838,9 +838,20 @@ class JupyterHub(Application): handlers[i] = tuple(lis) return handlers + extra_page_handlers = List().tag(config=True) + default_page = Any(default_value=None).tag(config=True) + default_user_page = Any(default_value=None).tag(config=True) + + def init_handlers(self): h = [] + + # add any user configurable handlers. Make it first so it can override + # builtin handlers + + h.extend(self.extra_page_handlers) # load handlers from the authenticator + h.extend(self.authenticator.get_handlers(self)) # set default handlers h.extend(handlers.default_handlers) diff --git a/jupyterhub/handlers/base.py b/jupyterhub/handlers/base.py index 082c1ad5..e3646c8e 100644 --- a/jupyterhub/handlers/base.py +++ b/jupyterhub/handlers/base.py @@ -431,9 +431,15 @@ class BaseHandler(RequestHandler): # default URL after login # if self.redirect_to_server, default login URL initiates spawn if user and self.redirect_to_server: - next_url = user.url + if self.config.JupyterHub.get('default_user_page'): + next_url = self.config.JupyterHub['default_user_page'] + else: + next_url = user.url else: - next_url = url_path_join(self.hub.base_url, 'home') + if self.config.JupyterHub.get('default_page'): + next_url = self.config.JupyterHub['default_page'] + else: + next_url = url_path_join(self.hub.base_url, 'home') return next_url async def login_user(self, data=None): From 9cefb27704c851be49a38236fbcfa7d872f1dab9 Mon Sep 17 00:00:00 2001 From: Haw-minn Lu Date: Mon, 7 May 2018 14:06:34 -0700 Subject: [PATCH 2/5] Move extra_handlers to fall below builtins in priority --- jupyterhub/app.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/jupyterhub/app.py b/jupyterhub/app.py index bf2c38f3..96275cc7 100644 --- a/jupyterhub/app.py +++ b/jupyterhub/app.py @@ -846,10 +846,6 @@ class JupyterHub(Application): def init_handlers(self): h = [] - # add any user configurable handlers. Make it first so it can override - # builtin handlers - - h.extend(self.extra_page_handlers) # load handlers from the authenticator h.extend(self.authenticator.get_handlers(self)) @@ -857,6 +853,9 @@ class JupyterHub(Application): h.extend(handlers.default_handlers) h.extend(apihandlers.default_handlers) + # add any user configurable handlers. + h.extend(self.extra_page_handlers) + h.append((r'/logo', LogoHandler, {'path': self.logo_file})) self.handlers = self.add_url_prefix(self.hub_prefix, h) # some extra handlers, outside hub_prefix From 5179d922f5461faa0ecc82a3033bdb8bfdd56e84 Mon Sep 17 00:00:00 2001 From: Haw-minn Lu Date: Thu, 10 May 2018 11:22:50 -0700 Subject: [PATCH 3/5] Clean up extra handler defaults --- jupyterhub/app.py | 4 +--- jupyterhub/handlers/base.py | 12 ++++-------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/jupyterhub/app.py b/jupyterhub/app.py index 96275cc7..e6066f12 100644 --- a/jupyterhub/app.py +++ b/jupyterhub/app.py @@ -839,9 +839,7 @@ class JupyterHub(Application): return handlers extra_page_handlers = List().tag(config=True) - default_page = Any(default_value=None).tag(config=True) - default_user_page = Any(default_value=None).tag(config=True) - + default_url = Any(default_value=None).tag(config=True) def init_handlers(self): h = [] diff --git a/jupyterhub/handlers/base.py b/jupyterhub/handlers/base.py index e3646c8e..5f3a8574 100644 --- a/jupyterhub/handlers/base.py +++ b/jupyterhub/handlers/base.py @@ -426,20 +426,16 @@ class BaseHandler(RequestHandler): self.log.warning("Redirecting %s to %s. For sharing public links, use /user-redirect/", self.request.uri, next_url, ) + if not next_url and self.config.JupyterHub.get('default_url'): + next_url = url_path_join(self.hub.base_url, self.config.JupyterHub['default_url']) if not next_url: # default URL after login # if self.redirect_to_server, default login URL initiates spawn if user and self.redirect_to_server: - if self.config.JupyterHub.get('default_user_page'): - next_url = self.config.JupyterHub['default_user_page'] - else: - next_url = user.url + next_url = user.url else: - if self.config.JupyterHub.get('default_page'): - next_url = self.config.JupyterHub['default_page'] - else: - next_url = url_path_join(self.hub.base_url, 'home') + next_url = url_path_join(self.hub.base_url, 'home') return next_url async def login_user(self, data=None): From 80ac2475a09b279a565d1a6b37bf7bab24ef985c Mon Sep 17 00:00:00 2001 From: Haw-minn Lu Date: Thu, 10 May 2018 11:25:02 -0700 Subject: [PATCH 4/5] Restore whitespacing to original --- jupyterhub/app.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/jupyterhub/app.py b/jupyterhub/app.py index e6066f12..c54f0c9e 100644 --- a/jupyterhub/app.py +++ b/jupyterhub/app.py @@ -843,9 +843,7 @@ class JupyterHub(Application): def init_handlers(self): h = [] - # load handlers from the authenticator - h.extend(self.authenticator.get_handlers(self)) # set default handlers h.extend(handlers.default_handlers) From 24611f94cf63852f58760630f833c2688ebb465f Mon Sep 17 00:00:00 2001 From: Haw-minn Lu Date: Mon, 14 May 2018 11:53:22 -0700 Subject: [PATCH 5/5] Remove base_url from default_url Add help to new traits change extra_page_handler to extra_handler --- jupyterhub/app.py | 6 +++--- jupyterhub/handlers/base.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jupyterhub/app.py b/jupyterhub/app.py index c54f0c9e..def7a896 100644 --- a/jupyterhub/app.py +++ b/jupyterhub/app.py @@ -838,8 +838,8 @@ class JupyterHub(Application): handlers[i] = tuple(lis) return handlers - extra_page_handlers = List().tag(config=True) - default_url = Any(default_value=None).tag(config=True) + extra_handlers = List(help="Register extra page handlers for jupyterhub, should be of the form (,handler)").tag(config=True) + default_url = Any(default_value=None, help='specify default URL for "next_url" (e.g. when user directs to "/"').tag(config=True) def init_handlers(self): h = [] @@ -850,7 +850,7 @@ class JupyterHub(Application): h.extend(apihandlers.default_handlers) # add any user configurable handlers. - h.extend(self.extra_page_handlers) + h.extend(self.extra_handlers) h.append((r'/logo', LogoHandler, {'path': self.logo_file})) self.handlers = self.add_url_prefix(self.hub_prefix, h) diff --git a/jupyterhub/handlers/base.py b/jupyterhub/handlers/base.py index 5f3a8574..5a4f5ca2 100644 --- a/jupyterhub/handlers/base.py +++ b/jupyterhub/handlers/base.py @@ -427,7 +427,7 @@ class BaseHandler(RequestHandler): self.request.uri, next_url, ) if not next_url and self.config.JupyterHub.get('default_url'): - next_url = url_path_join(self.hub.base_url, self.config.JupyterHub['default_url']) + next_url = self.config.JupyterHub['default_url'] if not next_url: # default URL after login