예제 #1
0
    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
예제 #2
0
    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