From 0d11ffca54e63d997c303148cd5191bde0770939 Mon Sep 17 00:00:00 2001 From: "Afshin T. Darian" Date: Wed, 21 Apr 2021 13:25:45 +0100 Subject: [PATCH] Fix loading of sibling extensions --- jupyter_server/extension/application.py | 12 ++++++++---- jupyter_server/tests/extension/mockextensions/app.py | 6 ++++++ jupyter_server/tests/extension/test_app.py | 12 ++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/jupyter_server/extension/application.py b/jupyter_server/extension/application.py index 605f9bffa0..e5cb6bcafd 100644 --- a/jupyter_server/extension/application.py +++ b/jupyter_server/extension/application.py @@ -477,13 +477,18 @@ def initialize_server(cls, argv=[], load_other_extensions=True, **kwargs): The `launch_instance` method uses this method to initialize and start a server. """ + jpserver_extensions = {cls.get_extension_package(): True} + find_extensions = cls.load_other_extensions + if 'jpserver_extensions' in cls.serverapp_config: + jpserver_extensions.update(cls.serverapp_config['jpserver_extensions']) + cls.serverapp_config['jpserver_extensions'] = jpserver_extensions + find_extensions = False serverapp = ServerApp.instance( - jpserver_extensions={cls.get_extension_package(): True}, **kwargs) - serverapp.aliases.update(cls.aliases) + jpserver_extensions=jpserver_extensions, **kwargs) serverapp.initialize( argv=argv, starter_extension=cls.name, - find_extensions=cls.load_other_extensions, + find_extensions=find_extensions, ) return serverapp @@ -510,7 +515,6 @@ def launch_instance(cls, argv=None, **kwargs): # before initializing server to make sure these # arguments trigger actions from the extension not the server. _preparse_for_stopping_flags(cls, args) - serverapp = cls.initialize_server(argv=args) # Log if extension is blocking other extensions from loading. diff --git a/jupyter_server/tests/extension/mockextensions/app.py b/jupyter_server/tests/extension/mockextensions/app.py index 7aba3e2b2e..31a2d14b12 100644 --- a/jupyter_server/tests/extension/mockextensions/app.py +++ b/jupyter_server/tests/extension/mockextensions/app.py @@ -47,6 +47,12 @@ class MockExtensionApp(ExtensionAppJinjaMixin, ExtensionApp): mock_trait = Unicode('mock trait', config=True) loaded = False + serverapp_config = { + "jpserver_extensions": { + "jupyter_server.tests.extension.mockextensions.mock1": True + } + } + @staticmethod def get_extension_package(): return "jupyter_server.tests.extension.mockextensions" diff --git a/jupyter_server/tests/extension/test_app.py b/jupyter_server/tests/extension/test_app.py index c148f8efd3..3cc0e82fe6 100644 --- a/jupyter_server/tests/extension/test_app.py +++ b/jupyter_server/tests/extension/test_app.py @@ -89,3 +89,15 @@ def test_extensionapp_load_config_file( def test_browser_open(monkeypatch, jp_environ, config, expected_value): serverapp = MockExtensionApp.initialize_server(config=Config(config)) assert serverapp.open_browser == expected_value + + + +def test_load_parallel_extensions(monkeypatch, jp_environ): + serverapp = MockExtensionApp.initialize_server() + exts = serverapp.extension_manager.extensions + assert 'jupyter_server.tests.extension.mockextensions.mock1' in exts + assert 'jupyter_server.tests.extension.mockextensions' in exts + + exts = serverapp.jpserver_extensions + assert exts['jupyter_server.tests.extension.mockextensions.mock1'] + assert exts['jupyter_server.tests.extension.mockextensions']