Skip to content

Commit 27c00bf

Browse files
authored
Merge pull request #3158 from shiti-saxena/dev
adding option to specify extra services
2 parents c2dc429 + 37bb6e6 commit 27c00bf

File tree

1 file changed

+34
-24
lines changed

1 file changed

+34
-24
lines changed

notebook/notebookapp.py

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ def random_ports(port, n):
134134

135135
def load_handlers(name):
136136
"""Load the (URL pattern, handler) tuples for each component."""
137-
name = 'notebook.' + name
138137
mod = __import__(name, fromlist=['default_handlers'])
139138
return mod.default_handlers
140139

@@ -146,21 +145,22 @@ class NotebookWebApplication(web.Application):
146145

147146
def __init__(self, jupyter_app, kernel_manager, contents_manager,
148147
session_manager, kernel_spec_manager,
149-
config_manager, log,
148+
config_manager, extra_services, log,
150149
base_url, default_url, settings_overrides, jinja_env_options):
151150

152151

153152
settings = self.init_settings(
154153
jupyter_app, kernel_manager, contents_manager,
155-
session_manager, kernel_spec_manager, config_manager, log,
156-
base_url, default_url, settings_overrides, jinja_env_options)
154+
session_manager, kernel_spec_manager, config_manager,
155+
extra_services, log, base_url,
156+
default_url, settings_overrides, jinja_env_options)
157157
handlers = self.init_handlers(settings)
158158

159159
super(NotebookWebApplication, self).__init__(handlers, **settings)
160160

161161
def init_settings(self, jupyter_app, kernel_manager, contents_manager,
162162
session_manager, kernel_spec_manager,
163-
config_manager,
163+
config_manager, extra_services,
164164
log, base_url, default_url, settings_overrides,
165165
jinja_env_options=None):
166166

@@ -259,6 +259,9 @@ def init_settings(self, jupyter_app, kernel_manager, contents_manager,
259259
kernel_spec_manager=kernel_spec_manager,
260260
config_manager=config_manager,
261261

262+
# handlers
263+
extra_services=extra_services,
264+
262265
# Jupyter stuff
263266
started=now,
264267
jinja_template_vars=jupyter_app.jinja_template_vars,
@@ -283,25 +286,28 @@ def init_handlers(self, settings):
283286

284287
# Order matters. The first handler to match the URL will handle the request.
285288
handlers = []
286-
handlers.extend(load_handlers('tree.handlers'))
289+
# load extra services specified by users before default handlers
290+
for service in settings['extra_services']:
291+
handlers.extend(load_handlers(service))
292+
handlers.extend(load_handlers('notebook.tree.handlers'))
287293
handlers.extend([(r"/login", settings['login_handler_class'])])
288294
handlers.extend([(r"/logout", settings['logout_handler_class'])])
289-
handlers.extend(load_handlers('files.handlers'))
290-
handlers.extend(load_handlers('view.handlers'))
291-
handlers.extend(load_handlers('notebook.handlers'))
292-
handlers.extend(load_handlers('nbconvert.handlers'))
293-
handlers.extend(load_handlers('bundler.handlers'))
294-
handlers.extend(load_handlers('kernelspecs.handlers'))
295-
handlers.extend(load_handlers('edit.handlers'))
296-
handlers.extend(load_handlers('services.api.handlers'))
297-
handlers.extend(load_handlers('services.config.handlers'))
298-
handlers.extend(load_handlers('services.kernels.handlers'))
299-
handlers.extend(load_handlers('services.contents.handlers'))
300-
handlers.extend(load_handlers('services.sessions.handlers'))
301-
handlers.extend(load_handlers('services.nbconvert.handlers'))
302-
handlers.extend(load_handlers('services.kernelspecs.handlers'))
303-
handlers.extend(load_handlers('services.security.handlers'))
304-
handlers.extend(load_handlers('services.shutdown'))
295+
handlers.extend(load_handlers('notebook.files.handlers'))
296+
handlers.extend(load_handlers('notebook.view.handlers'))
297+
handlers.extend(load_handlers('notebook.notebook.handlers'))
298+
handlers.extend(load_handlers('notebook.nbconvert.handlers'))
299+
handlers.extend(load_handlers('notebook.bundler.handlers'))
300+
handlers.extend(load_handlers('notebook.kernelspecs.handlers'))
301+
handlers.extend(load_handlers('notebook.edit.handlers'))
302+
handlers.extend(load_handlers('notebook.services.api.handlers'))
303+
handlers.extend(load_handlers('notebook.services.config.handlers'))
304+
handlers.extend(load_handlers('notebook.services.kernels.handlers'))
305+
handlers.extend(load_handlers('notebook.services.contents.handlers'))
306+
handlers.extend(load_handlers('notebook.services.sessions.handlers'))
307+
handlers.extend(load_handlers('notebook.services.nbconvert.handlers'))
308+
handlers.extend(load_handlers('notebook.services.kernelspecs.handlers'))
309+
handlers.extend(load_handlers('notebook.services.security.handlers'))
310+
handlers.extend(load_handlers('notebook.services.shutdown'))
305311
handlers.extend(settings['contents_manager'].get_extra_handlers())
306312

307313
handlers.append(
@@ -317,7 +323,7 @@ def init_handlers(self, settings):
317323
})
318324
)
319325
# register base handlers last
320-
handlers.extend(load_handlers('base.handlers'))
326+
handlers.extend(load_handlers('notebook.base.handlers'))
321327
# set the URL that will be redirected from `/`
322328
handlers.append(
323329
(r'/?', RedirectWithParams, {
@@ -953,6 +959,10 @@ def template_file_path(self):
953959
extra_nbextensions_path = List(Unicode(), config=True,
954960
help=_("""extra paths to look for Javascript notebook extensions""")
955961
)
962+
963+
extra_services = List(Unicode(), config=True,
964+
help=_("""handlers that should be loaded at higher priority than the default services""")
965+
)
956966

957967
@property
958968
def nbextensions_path(self):
@@ -1255,7 +1265,7 @@ def init_webapp(self):
12551265
self.web_app = NotebookWebApplication(
12561266
self, self.kernel_manager, self.contents_manager,
12571267
self.session_manager, self.kernel_spec_manager,
1258-
self.config_manager,
1268+
self.config_manager, self.extra_services,
12591269
self.log, self.base_url, self.default_url, self.tornado_settings,
12601270
self.jinja_environment_options
12611271
)

0 commit comments

Comments
 (0)