@@ -134,7 +134,6 @@ def random_ports(port, n):
134
134
135
135
def load_handlers (name ):
136
136
"""Load the (URL pattern, handler) tuples for each component."""
137
- name = 'notebook.' + name
138
137
mod = __import__ (name , fromlist = ['default_handlers' ])
139
138
return mod .default_handlers
140
139
@@ -146,21 +145,22 @@ class NotebookWebApplication(web.Application):
146
145
147
146
def __init__ (self , jupyter_app , kernel_manager , contents_manager ,
148
147
session_manager , kernel_spec_manager ,
149
- config_manager , log ,
148
+ config_manager , extra_services , log ,
150
149
base_url , default_url , settings_overrides , jinja_env_options ):
151
150
152
151
153
152
settings = self .init_settings (
154
153
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 )
157
157
handlers = self .init_handlers (settings )
158
158
159
159
super (NotebookWebApplication , self ).__init__ (handlers , ** settings )
160
160
161
161
def init_settings (self , jupyter_app , kernel_manager , contents_manager ,
162
162
session_manager , kernel_spec_manager ,
163
- config_manager ,
163
+ config_manager , extra_services ,
164
164
log , base_url , default_url , settings_overrides ,
165
165
jinja_env_options = None ):
166
166
@@ -259,6 +259,9 @@ def init_settings(self, jupyter_app, kernel_manager, contents_manager,
259
259
kernel_spec_manager = kernel_spec_manager ,
260
260
config_manager = config_manager ,
261
261
262
+ # handlers
263
+ extra_services = extra_services ,
264
+
262
265
# Jupyter stuff
263
266
started = now ,
264
267
jinja_template_vars = jupyter_app .jinja_template_vars ,
@@ -283,25 +286,28 @@ def init_handlers(self, settings):
283
286
284
287
# Order matters. The first handler to match the URL will handle the request.
285
288
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' ))
287
293
handlers .extend ([(r"/login" , settings ['login_handler_class' ])])
288
294
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' ))
305
311
handlers .extend (settings ['contents_manager' ].get_extra_handlers ())
306
312
307
313
handlers .append (
@@ -317,7 +323,7 @@ def init_handlers(self, settings):
317
323
})
318
324
)
319
325
# register base handlers last
320
- handlers .extend (load_handlers ('base.handlers' ))
326
+ handlers .extend (load_handlers ('notebook. base.handlers' ))
321
327
# set the URL that will be redirected from `/`
322
328
handlers .append (
323
329
(r'/?' , RedirectWithParams , {
@@ -953,6 +959,10 @@ def template_file_path(self):
953
959
extra_nbextensions_path = List (Unicode (), config = True ,
954
960
help = _ ("""extra paths to look for Javascript notebook extensions""" )
955
961
)
962
+
963
+ extra_services = List (Unicode (), config = True ,
964
+ help = _ ("""handlers that should be loaded at higher priority than the default services""" )
965
+ )
956
966
957
967
@property
958
968
def nbextensions_path (self ):
@@ -1255,7 +1265,7 @@ def init_webapp(self):
1255
1265
self .web_app = NotebookWebApplication (
1256
1266
self , self .kernel_manager , self .contents_manager ,
1257
1267
self .session_manager , self .kernel_spec_manager ,
1258
- self .config_manager ,
1268
+ self .config_manager , self . extra_services ,
1259
1269
self .log , self .base_url , self .default_url , self .tornado_settings ,
1260
1270
self .jinja_environment_options
1261
1271
)
0 commit comments