|
@@ -2,44 +2,72 @@
|
|
|
Copyright (c) Jupyter Development Team.
|
|
|
Distributed under the terms of the Modified BSD License.
|
|
|
"""
|
|
|
-from notebook.notebookapp import NotebookApp
|
|
|
import os
|
|
|
-from jinja2 import FileSystemLoader
|
|
|
-from notebook.base.handlers import IPythonHandler, FileFindHandler
|
|
|
-from notebook.utils import url_path_join as ujoin
|
|
|
+import json
|
|
|
+from jupyter_server.base.handlers import JupyterHandler, FileFindHandler
|
|
|
+from jupyter_server.extension.handler import ExtensionHandlerMixin, ExtensionHandlerJinjaMixin
|
|
|
+from jupyterlab_server import LabServerApp, LabConfig
|
|
|
+from jupyter_server.utils import url_path_join as ujoin
|
|
|
from traitlets import Unicode
|
|
|
|
|
|
|
|
|
HERE = os.path.dirname(__file__)
|
|
|
-LOADER = FileSystemLoader(HERE)
|
|
|
|
|
|
+with open(os.path.join(HERE, 'package.json')) as fid:
|
|
|
+ version = json.load(fid)['version']
|
|
|
|
|
|
-class ExampleHander(IPythonHandler):
|
|
|
+class ExampleHandler(ExtensionHandlerJinjaMixin, ExtensionHandlerMixin, JupyterHandler):
|
|
|
"""Handle requests between the main app page and notebook server."""
|
|
|
|
|
|
+ def initialize(self):
|
|
|
+ super().initialize('lab')
|
|
|
+
|
|
|
def get(self):
|
|
|
"""Get the main page for the application's interface."""
|
|
|
- return self.write(self.render_template("index.html",
|
|
|
- static=self.static_url, base_url=self.base_url,
|
|
|
- token=self.settings['token']))
|
|
|
-
|
|
|
- def get_template(self, name):
|
|
|
- return LOADER.load(self.settings['jinja2_env'], name)
|
|
|
+ config_data = {
|
|
|
+ # Use camelCase here, since that's what the lab components expect
|
|
|
+ "appVersion": version,
|
|
|
+ 'baseUrl': self.base_url,
|
|
|
+ 'token': self.settings['token'],
|
|
|
+ 'fullStaticUrl': ujoin(self.base_url, 'static', 'example'),
|
|
|
+ 'frontendUrl': ujoin(self.base_url, 'example/'),
|
|
|
+ }
|
|
|
+ return self.write(
|
|
|
+ self.render_template(
|
|
|
+ 'index.html',
|
|
|
+ static=self.static_url,
|
|
|
+ base_url=self.base_url,
|
|
|
+ token=self.settings['token'],
|
|
|
+ page_config=config_data
|
|
|
+ )
|
|
|
+ )
|
|
|
|
|
|
|
|
|
-class ExampleApp(NotebookApp):
|
|
|
- """A notebook app that runs the example."""
|
|
|
+class ExampleApp(LabServerApp):
|
|
|
|
|
|
default_url = Unicode('/example')
|
|
|
|
|
|
- def start(self):
|
|
|
+ lab_config = LabConfig(
|
|
|
+ app_name = 'JupyterLab Example Cell',
|
|
|
+ app_url = '/example',
|
|
|
+ static_dir = os.path.join(HERE, 'build'),
|
|
|
+ templates_dir = os.path.join(HERE, 'templates'),
|
|
|
+ app_version = version,
|
|
|
+ app_settings_dir = os.path.join(HERE, 'build', 'application_settings'),
|
|
|
+ schemas_dir = os.path.join(HERE, 'build', 'schemas'),
|
|
|
+ themes_dir = os.path.join(HERE, 'build', 'themes'),
|
|
|
+ user_settings_dir = os.path.join(HERE, 'build', 'user_settings'),
|
|
|
+ workspaces_dir = os.path.join(HERE, 'build', 'workspaces'),
|
|
|
+ )
|
|
|
+
|
|
|
+ def initialize_handlers(self):
|
|
|
+ """initialize tornado webapp and httpserver.
|
|
|
+ """
|
|
|
default_handlers = [
|
|
|
- (ujoin(self.base_url, r'/example/?'), ExampleHander),
|
|
|
- (ujoin(self.base_url, r"/example/(.*)"), FileFindHandler,
|
|
|
- {'path': os.path.join(HERE, 'build')}),
|
|
|
+ (ujoin(self.serverapp.base_url, 'example'), ExampleHandler),
|
|
|
]
|
|
|
- self.web_app.add_handlers(".*$", default_handlers)
|
|
|
- super(ExampleApp, self).start()
|
|
|
+ self.serverapp.web_app.add_handlers('.*$', default_handlers)
|
|
|
+ super().initialize_handlers()
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|