You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
3.0 KiB
Python

# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
import json
from jupyterlab_server.config import get_static_page_config
from jupyterlab.commands import get_app_info, lock_extension, unlock_extension
from jupyterlab.extensions.manager import PluginManager
from jupyterlab.handlers.plugin_manager_handler import PluginHandler, plugins_handler_path
def plugin_handler_labapp(jp_serverapp, make_labserver_extension_app):
app = make_labserver_extension_app()
app._link_jupyter_server_extension(jp_serverapp)
# Simulate jupyter_server page config data.
page_config = jp_serverapp.web_app.settings.setdefault("page_config_data", {})
page_config.update(get_static_page_config(level="sys_prefix"))
lock_rules = frozenset(
{rule for rule, value in page_config.get("lockedExtensions", {}).items() if value}
)
app.handlers.extend(
[
(
plugins_handler_path,
PluginHandler,
{
"manager": PluginManager(
ext_options={
"lock_rules": lock_rules,
"all_locked": False,
}
)
},
),
]
)
return app
async def test_pluginHandler_lock_extension(jp_serverapp, jp_fetch, make_labserver_extension_app):
extension1 = "@jupyterlab/application-extension:status"
extension2 = "@jupyterlab/theme-dark-extension:plugin"
info = get_app_info()
assert info["locked"].get(extension1, False) is False
lock_extension(extension1)
lock_extension(extension2)
info = get_app_info()
assert info["locked"].get(extension1, False) is True
assert info["locked"].get(extension2, False) is True
# Initialize the labserver
labapp = plugin_handler_labapp(
jp_serverapp=jp_serverapp, make_labserver_extension_app=make_labserver_extension_app
)
labapp.initialize()
# Hit and verify the pluginHandler
response = await jp_fetch("lab", "api", "plugins", method="GET")
payload = json.loads(response.body)
assert response.code == 200
assert sorted(payload["lockRules"]) == sorted([extension1, extension2])
async def test_pluginHandler_unlock_extension(jp_serverapp, jp_fetch, make_labserver_extension_app):
extension = "@jupyterlab/application-extension:status"
lock_extension(extension)
info = get_app_info()
assert info["locked"].get(extension, False) is True
unlock_extension(extension)
info = get_app_info()
assert info["locked"].get(extension, False) is False
# Initialize the labserver
labapp = plugin_handler_labapp(
jp_serverapp=jp_serverapp, make_labserver_extension_app=make_labserver_extension_app
)
labapp.initialize()
# Hit and verify the pluginHandler
response = await jp_fetch("lab", "api", "plugins", method="GET")
payload = json.loads(response.body)
assert response.code == 200
assert payload["lockRules"] == []