# Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. from jupyterlab_server import LabServerApp, LabConfig from jupyterlab_server.server import FileFindHandler import json import os from traitlets import Unicode from glob import glob HERE = os.path.abspath(os.path.dirname(__file__)) # Turn off the Jupyter configuration system so configuration files on disk do # not affect this app. This helps this app to truly be standalone. os.environ["JUPYTER_NO_CONFIG"]="1" with open(os.path.join(HERE, 'package.json')) as fid: version = json.load(fid)['version'] def _jupyter_server_extension_points(): return [ { 'module': __name__, 'app': ExampleApp } ] class ExampleApp(LabServerApp): name = 'lab' load_other_extensions = False app_name = 'JupyterLab Example Federated App' app_settings_dir = os.path.join(HERE, 'build', 'application_settings') app_version = version schemas_dir = os.path.join(HERE, 'core_package', 'build', 'schemas') static_dir = os.path.join(HERE, 'core_package', 'build') templates_dir = os.path.join(HERE, 'templates') themes_dir = os.path.join(HERE, 'core_package', 'build', 'themes') user_settings_dir = os.path.join(HERE, 'core_package', 'build', 'user_settings') workspaces_dir = os.path.join(HERE, 'core_package', 'build', 'workspaces') labextensions_path = [os.path.join(HERE, "labextensions")] def initialize_handlers(self): # Handle labextension assets web_app = self.serverapp.web_app base_url = web_app.settings['base_url'] page_config = web_app.settings.get('page_config_data', {}) web_app.settings['page_config_data'] = page_config # By default, make terminals available. web_app.settings.setdefault('terminals_available', True) # Extract the federated extension data from lab_extensions federated_exts = [] for ext_path in [path for path in glob('./labextensions/**/package.json', recursive=True)]: with open(ext_path) as fid: data = json.load(fid) extbuild = data['jupyterlab']['_build'] ext = { 'name': data['name'], 'load': extbuild['load'], } if 'extension' in extbuild: ext['extension'] = extbuild['extension'] if 'mimeExtension' in extbuild: ext['mimeExtension'] = extbuild['mimeExtension'] if 'style' in extbuild: ext['style'] = extbuild['style'] federated_exts.append(ext) page_config['federated_extensions'] = federated_exts super().initialize_handlers() if __name__ == '__main__': ExampleApp.launch_instance()