def init_handlers(self, settings): """Load the (URL pattern, handler) tuples for each component.""" # Order matters. The first handler to match the URL will handle the request. handlers = [] handlers.extend(load_handlers('tree.handlers')) handlers.extend([(r"/login", settings['login_handler_class'])]) handlers.extend([(r"/logout", settings['logout_handler_class'])]) handlers.extend(load_handlers('files.handlers')) handlers.extend(load_handlers('notebook.handlers')) handlers.extend(load_handlers('nbconvert.handlers')) handlers.extend(load_handlers('kernelspecs.handlers')) handlers.extend(load_handlers('edit.handlers')) handlers.extend(load_handlers('services.api.handlers')) handlers.extend(load_handlers('services.config.handlers')) handlers.extend(load_handlers('services.kernels.handlers')) handlers.extend(load_handlers('services.contents.handlers')) handlers.extend(load_handlers('services.sessions.handlers')) handlers.extend(load_handlers('services.nbconvert.handlers')) handlers.extend(load_handlers('services.kernelspecs.handlers')) handlers.extend(load_handlers('services.security.handlers')) handlers.extend(load_handlers('lab.handlers')) # BEGIN HARDCODED WIDGETS HACK # TODO: Remove on notebook 5.0 widgets = None try: import widgetsnbextension except: try: import ipywidgets as widgets handlers.append( (r"/nbextensions/widgets/(.*)", FileFindHandler, { 'path': widgets.find_static_assets(), 'no_cache_paths': ['/'], # don't cache anything in nbextensions }), ) except: app_log.warning('Widgets are unavailable. Please install widgetsnbextension or ipywidgets 4.0') # END HARDCODED WIDGETS HACK handlers.append( (r"/nbextensions/(.*)", FileFindHandler, { 'path': settings['nbextensions_path'], 'no_cache_paths': ['/'], # don't cache anything in nbextensions }), ) handlers.append( (r"/custom/(.*)", FileFindHandler, { 'path': settings['static_custom_path'], 'no_cache_paths': ['/'], # don't cache anything in custom }) ) # register base handlers last handlers.extend(load_handlers('base.handlers')) # set the URL that will be redirected from `/` handlers.append( (r'/?', web.RedirectHandler, { 'url' : settings['default_url'], 'permanent': False, # want 302, not 301 }) ) # prepend base_url onto the patterns that we match new_handlers = [] for handler in handlers: pattern = url_path_join(settings['base_url'], handler[0]) new_handler = tuple([pattern] + list(handler[1:])) new_handlers.append(new_handler) # add 404 on the end, which will catch everything that falls through new_handlers.append((r'(.*)', Template404)) return new_handlers
def init_handlers(self, settings): """Load the (URL pattern, handler) tuples for each component.""" # Order matters. The first handler to match the URL will handle the request. handlers = [] handlers.append((r"/deprecatedwidgets/(.*)", DeprecationHandler)) handlers.extend(load_handlers("tree.handlers")) handlers.extend([(r"/login", settings["login_handler_class"])]) handlers.extend([(r"/logout", settings["logout_handler_class"])]) handlers.extend(load_handlers("files.handlers")) handlers.extend(load_handlers("notebook.handlers")) handlers.extend(load_handlers("nbconvert.handlers")) handlers.extend(load_handlers("kernelspecs.handlers")) handlers.extend(load_handlers("edit.handlers")) handlers.extend(load_handlers("services.api.handlers")) handlers.extend(load_handlers("services.config.handlers")) handlers.extend(load_handlers("services.kernels.handlers")) handlers.extend(load_handlers("services.contents.handlers")) handlers.extend(load_handlers("services.sessions.handlers")) handlers.extend(load_handlers("services.nbconvert.handlers")) handlers.extend(load_handlers("services.kernelspecs.handlers")) handlers.extend(load_handlers("services.security.handlers")) # BEGIN HARDCODED WIDGETS HACK try: import ipywidgets handlers.append( ( r"/nbextensions/widgets/(.*)", FileFindHandler, { "path": ipywidgets.find_static_assets(), "no_cache_paths": ["/"], # don't cache anything in nbextensions }, ) ) except: app_log.warn("ipywidgets package not installed. Widgets are unavailable.") # END HARDCODED WIDGETS HACK handlers.append( ( r"/nbextensions/(.*)", FileFindHandler, { "path": settings["nbextensions_path"], "no_cache_paths": ["/"], # don't cache anything in nbextensions }, ) ) handlers.append( ( r"/custom/(.*)", FileFindHandler, {"path": settings["static_custom_path"], "no_cache_paths": ["/"]}, # don't cache anything in custom ) ) # register base handlers last handlers.extend(load_handlers("base.handlers")) # set the URL that will be redirected from `/` handlers.append( (r"/?", web.RedirectHandler, {"url": settings["default_url"], "permanent": False}) # want 302, not 301 ) # prepend base_url onto the patterns that we match new_handlers = [] for handler in handlers: pattern = url_path_join(settings["base_url"], handler[0]) new_handler = tuple([pattern] + list(handler[1:])) new_handlers.append(new_handler) # add 404 on the end, which will catch everything that falls through new_handlers.append((r"(.*)", Template404)) return new_handlers