Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix toggling extension at system level #16241

Merged
merged 7 commits into from
Apr 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 19 additions & 12 deletions jupyterlab/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -1125,12 +1125,15 @@ def toggle_extension(self, extension, value, level="sys_prefix"):
app_settings_dir = osp.join(self.app_dir, "settings")

# If extension is locked at a higher level, we don't toggle it.
allowed = get_allowed_levels()
if self._is_extension_locked(
extension, level=allowed[allowed.index(level) + 1], include_higher_levels=True
):
self.logger.info("Extension locked at a higher level, cannot toggle status")
return False
# The highest level at which an extension can be locked is system,
# so we do not need to check levels above that one.
if level != "system":
allowed = get_allowed_levels()
if self._is_extension_locked(
extension, level=allowed[allowed.index(level) + 1], include_higher_levels=True
):
self.logger.info("Extension locked at a higher level, cannot toggle status")
return False

page_config = get_static_page_config(
app_settings_dir=app_settings_dir, logger=self.logger, level=level
Expand Down Expand Up @@ -1180,12 +1183,16 @@ def _maybe_mirror_disabled_in_locked(self, level="sys_prefix"):
def toggle_extension_lock(self, extension, value, level="sys_prefix"):
"""Lock or unlock a lab extension (/plugin)."""
app_settings_dir = osp.join(self.app_dir, "settings")
allowed = get_allowed_levels()
if self._is_extension_locked(
extension, level=allowed[allowed.index(level) + 1], include_higher_levels=True
):
self.logger.info("Extension locked at a higher level, cannot toggle")
return

# The highest level at which an extension can be locked is system,
# so we do not need to check levels above that one.
if level != "system":
allowed = get_allowed_levels()
if self._is_extension_locked(
extension, level=allowed[allowed.index(level) + 1], include_higher_levels=True
):
self.logger.info("Extension locked at a higher level, cannot toggle")
return False

page_config = get_static_page_config(
app_settings_dir=app_settings_dir, logger=self.logger, level=level
Expand Down
11 changes: 11 additions & 0 deletions scripts/ci_script.sh
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,17 @@ if [[ $GROUP == usage ]]; then
cat labextensions | grep "Uninstalled core extensions:"
jupyter labextension install @jupyterlab/notebook-extension --no-build --debug
jupyter labextension enable @jupyterlab/notebook-extension --debug

# Test enable/disable on system level
JUPYTER_BIN=$(which jupyter)
sudo $JUPYTER_BIN labextension disable @jupyterlab/console-extension --level system --debug
sudo $JUPYTER_BIN labextension list 1>labextensions 2>&1 --debug
cat labextensions | grep "@jupyterlab/console-extension (all plugins)"
sudo $JUPYTER_BIN labextension enable @jupyterlab/console-extension --level system --debug
sudo $JUPYTER_BIN labextension list 1>labextensions 2>&1 --debug
! cat labextensions | grep -L "@jupyterlab/console-extension (all plugins)"

# Test locking at higher level
jupyter labextension lock @jupyterlab/notebook-extension --level sys_prefix
jupyter labextension disable @jupyterlab/notebook-extension --level user 2>&1 | grep "Extension locked at a higher level, cannot toggle status"
jupyter labextension unlock @jupyterlab/notebook-extension --level sys_prefix
Expand Down
Loading