main.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. """
  2. An example demonstrating a stand-alone "notebook".
  3. Copyright (c) Jupyter Development Team.
  4. Distributed under the terms of the Modified BSD License.
  5. Example
  6. -------
  7. To run the example, see the instructions in the README to build it. Then
  8. run ``python main.py``.
  9. """
  10. import os
  11. import json
  12. from jupyter_server.base.handlers import JupyterHandler, FileFindHandler
  13. from jupyter_server.extension.handler import ExtensionHandlerMixin, ExtensionHandlerJinjaMixin
  14. from jupyterlab_server import LabServerApp
  15. from jupyter_server.utils import url_path_join as ujoin
  16. from traitlets import Unicode
  17. HERE = os.path.dirname(__file__)
  18. with open(os.path.join(HERE, 'package.json')) as fid:
  19. version = json.load(fid)['version']
  20. def _jupyter_server_extension_paths():
  21. return [
  22. {
  23. 'module': 'main',
  24. 'app': ExampleApp
  25. }
  26. ]
  27. class ExampleHandler(
  28. ExtensionHandlerJinjaMixin,
  29. ExtensionHandlerMixin,
  30. JupyterHandler
  31. ):
  32. """Handle requests between the main app page and notebook server."""
  33. def get(self):
  34. """Get the main page for the application's interface."""
  35. config_data = {
  36. # Use camelCase here, since that's what the lab components expect
  37. "appVersion": version,
  38. 'baseUrl': self.base_url,
  39. 'token': self.settings['token'],
  40. 'fullStaticUrl': ujoin(self.base_url, 'static', self.extension_name),
  41. 'frontendUrl': ujoin(self.base_url, 'example/'),
  42. }
  43. return self.write(
  44. self.render_template(
  45. 'index.html',
  46. static=self.static_url,
  47. base_url=self.base_url,
  48. token=self.settings['token'],
  49. page_config=config_data
  50. )
  51. )
  52. class ExampleApp(LabServerApp):
  53. extension_url = '/example'
  54. extension_name = 'main'
  55. app_name = 'JupyterLab Example Cell'
  56. app_url = '/example_app'
  57. static_dir = os.path.join(HERE, 'build')
  58. templates_dir = os.path.join(HERE, 'templates')
  59. app_version = version
  60. app_settings_dir = os.path.join(HERE, 'build', 'application_settings')
  61. schemas_dir = os.path.join(HERE, 'build', 'schemas')
  62. themes_dir = os.path.join(HERE, 'build', 'themes')
  63. user_settings_dir = os.path.join(HERE, 'build', 'user_settings')
  64. workspaces_dir = os.path.join(HERE, 'build', 'workspaces')
  65. def initialize_handlers(self):
  66. """Add example handler to Lab Server's handler list.
  67. """
  68. self.handlers.append(
  69. ('/example', ExampleHandler)
  70. )
  71. if __name__ == '__main__':
  72. ExampleApp.launch_instance()