Browse Source

Backport PR #11744: Fix handling of disabled extensions (#11755)

Co-authored-by: Jeremy Tuloup <jeremy.tuloup@gmail.com>
MeeseeksMachine 3 năm trước cách đây
mục cha
commit
6910a96b3e
2 tập tin đã thay đổi với 17 bổ sung9 xóa
  1. 13 5
      jupyterlab/commands.py
  2. 4 4
      jupyterlab/tests/test_jupyterlab.py

+ 13 - 5
jupyterlab/commands.py

@@ -602,8 +602,6 @@ class _AppHandler(object):
         # Do this last since it relies on other attributes
         self.info = self._get_app_info()
 
-
-
     def install_extension(self, extension, existing=None, pin=None):
         """Install an extension package into JupyterLab.
 
@@ -1153,7 +1151,13 @@ class _AppHandler(object):
 
         page_config = get_page_config(labextensions_path, app_settings_dir=app_settings_dir, logger=self.logger)
 
-        info['disabled'] = page_config.get('disabledExtensions', [])
+        disabled = page_config.get('disabledExtensions', {})
+        # handle disabledExtensions specified as a list (jupyterlab_server < 2.10)
+        # see https://github.com/jupyterlab/jupyterlab_server/pull/192 for more info
+        if isinstance(disabled, list):
+            disabled = { extension: True for extension in disabled }
+
+        info['disabled'] = disabled
 
         disabled_core = []
         for key in info['core_extensions']:
@@ -2230,10 +2234,14 @@ def _compare_ranges(spec1, spec2, drop_prerelease1=False, drop_prerelease2=False
     return return_value
 
 
-def _is_disabled(name, disabled=[]):
+def _is_disabled(name, disabled=None):
     """Test whether the package is disabled.
     """
-    for pattern in disabled:
+    disabled = disabled or {}
+    for pattern, value in disabled.items():
+        # skip packages explicitly marked as not disabled
+        if value == False:
+            continue
         if name == pattern:
             return True
         if re.compile(pattern).match(name) is not None:

+ 4 - 4
jupyterlab/tests/test_jupyterlab.py

@@ -543,15 +543,15 @@ class TestExtension(AppHandlerTest):
         assert disable_extension(self.pkg_names['extension'], app_options=options) is True
         info = get_app_info(app_options=options)
         name = self.pkg_names['extension']
-        assert name in info['disabled']
+        assert info['disabled'].get(name) is True
         assert not check_extension(name, app_options=options)
         assert check_extension(name, installed=True, app_options=options)
         assert disable_extension('@jupyterlab/notebook-extension', app_options=options) is True
         info = get_app_info(app_options=options)
-        assert '@jupyterlab/notebook-extension' in info['disabled']
+        assert info['disabled'].get('@jupyterlab/notebook-extension') is True
         assert not check_extension('@jupyterlab/notebook-extension', app_options=options)
         assert check_extension('@jupyterlab/notebook-extension', installed=True, app_options=options)
-        assert name in info['disabled']
+        assert info['disabled'].get(name) is True
         assert not check_extension(name, app_options=options)
         assert check_extension(name, installed=True, app_options=options)
 
@@ -563,7 +563,7 @@ class TestExtension(AppHandlerTest):
         info = get_app_info(app_options=options)
         assert '@jupyterlab/notebook-extension' not in info['disabled']
         name = self.pkg_names['extension']
-        assert name not in info['disabled']
+        assert info['disabled'].get(name, False) is False
         assert check_extension(name, app_options=options)
         assert disable_extension('@jupyterlab/notebook-extension', app_options=options) is True
         assert check_extension(name, app_options=options)