|
@@ -6,6 +6,8 @@
|
|
|
|
|
|
from __future__ import print_function
|
|
|
|
|
|
+import glob
|
|
|
+import json
|
|
|
import os
|
|
|
import shutil
|
|
|
import sys
|
|
@@ -25,9 +27,8 @@ from traitlets.utils.importstring import import_item
|
|
|
|
|
|
from tornado.log import LogFormatter
|
|
|
|
|
|
-from . import (
|
|
|
- get_labextension_manifest_data_by_folder, semver
|
|
|
-)
|
|
|
+from .semver import satisfies
|
|
|
+
|
|
|
|
|
|
# Constants for pretty print extension listing function.
|
|
|
# Window doesn't support coloring in the commandline
|
|
@@ -38,6 +39,8 @@ GREEN_ENABLED = '\033[32menabled \033[0m' if os.name != 'nt' else 'enabled '
|
|
|
RED_DISABLED = '\033[31mdisabled\033[0m' if os.name != 'nt' else 'disabled'
|
|
|
|
|
|
|
|
|
+CONFIG_NAME = 'jupyter_notebook_config'
|
|
|
+
|
|
|
#------------------------------------------------------------------------------
|
|
|
# Public API
|
|
|
#------------------------------------------------------------------------------
|
|
@@ -279,15 +282,12 @@ def _set_labextension_state(name, state,
|
|
|
The name of the python module associated with the extension.
|
|
|
"""
|
|
|
user = False if sys_prefix else user
|
|
|
- config_dir = os.path.join(
|
|
|
- _get_config_dir(user=user, sys_prefix=sys_prefix))
|
|
|
- cm = BaseJSONConfigManager(config_dir=config_dir)
|
|
|
+ cfg = _read_config_data(user=user, sys_prefix=sys_prefix)
|
|
|
if logger:
|
|
|
logger.info("{} extension {}...".format(
|
|
|
"Enabling" if state else "Disabling",
|
|
|
name
|
|
|
))
|
|
|
- cfg = cm.get("jupyter_notebook_config")
|
|
|
labextensions = (
|
|
|
cfg.setdefault("LabApp", {})
|
|
|
.setdefault("labextensions", {})
|
|
@@ -312,10 +312,7 @@ def _set_labextension_state(name, state,
|
|
|
python_module=python_module
|
|
|
)
|
|
|
|
|
|
- if logger:
|
|
|
- logger.info(u"- Writing config: {}".format(config_dir))
|
|
|
-
|
|
|
- cm.update("jupyter_notebook_config", cfg)
|
|
|
+ _write_config_data(cfg, user=user, sys_prefix=sys_prefix, logger=logger)
|
|
|
|
|
|
if new_enabled:
|
|
|
full_dest = find_labextension(name)
|
|
@@ -350,7 +347,8 @@ def _set_labextension_state_python(state, module, user, sys_prefix,
|
|
|
return [_set_labextension_state(name=labext["name"],
|
|
|
state=state,
|
|
|
user=user, sys_prefix=sys_prefix,
|
|
|
- logger=logger)
|
|
|
+ logger=logger,
|
|
|
+ python_module=module)
|
|
|
for labext in labexts]
|
|
|
|
|
|
|
|
@@ -511,7 +509,7 @@ def validate_labextension_folder(name, full_dest, logger=None):
|
|
|
for dep in deps:
|
|
|
if dep.startswith('jupyterlab@'):
|
|
|
dep = dep.split('/')[0].split('@')[-1]
|
|
|
- if not semver.satisfies(__version__, dep, False):
|
|
|
+ if not satisfies(__version__, dep, False):
|
|
|
version_compatible.append('Expects JupyterLab version %s from packaged module %s'%(dep, mod))
|
|
|
break
|
|
|
|
|
@@ -546,6 +544,27 @@ def validate_labextension_folder(name, full_dest, logger=None):
|
|
|
return warnings
|
|
|
|
|
|
|
|
|
+def get_labextension_manifest_data_by_folder(folder):
|
|
|
+ """Get the manifest data for a given lab extension folder
|
|
|
+ """
|
|
|
+ manifest_files = glob.glob(os.path.join(folder, '*.manifest'))
|
|
|
+ manifests = {}
|
|
|
+ for file in manifest_files:
|
|
|
+ with open(file) as fid:
|
|
|
+ manifest = json.load(fid)
|
|
|
+ manifests[manifest['name']] = manifest
|
|
|
+ return manifests
|
|
|
+
|
|
|
+
|
|
|
+def get_labextension_manifest_data_by_name(name):
|
|
|
+ """Get the manifest data for a given lab extension folder
|
|
|
+ """
|
|
|
+ for exts in _labextension_dirs():
|
|
|
+ full_dest = os.path.join(exts, name)
|
|
|
+ if os.path.exists(full_dest):
|
|
|
+ return get_labextension_manifest_data_by_folder(full_dest)
|
|
|
+
|
|
|
+
|
|
|
def get_labextension_config_python(module):
|
|
|
"""Get the labextension configuration data associated with a Python module.
|
|
|
|
|
@@ -872,13 +891,11 @@ class ListLabExtensionsApp(BaseLabExtensionApp):
|
|
|
|
|
|
def list_labextensions(self):
|
|
|
"""List all the labextensions"""
|
|
|
- config_dirs = [os.path.join(p, 'labconfig') for p in jupyter_config_path()]
|
|
|
-
|
|
|
print("Known labextensions:")
|
|
|
-
|
|
|
- for config_dir in config_dirs:
|
|
|
+
|
|
|
+ for config_dir in jupyter_config_path():
|
|
|
cm = BaseJSONConfigManager(parent=self, config_dir=config_dir)
|
|
|
- data = cm.get("jupyterlab_config")
|
|
|
+ data = cm.get("jupyter_notebook_config")
|
|
|
labextensions = (
|
|
|
data.setdefault("LabApp", {})
|
|
|
.setdefault("labextensions", {})
|
|
@@ -1110,10 +1127,10 @@ def _read_config_data(user=False, sys_prefix=False):
|
|
|
"""
|
|
|
config_dir = _get_config_dir(user=user, sys_prefix=sys_prefix)
|
|
|
config_man = BaseJSONConfigManager(config_dir=config_dir)
|
|
|
- return config_man.get('jupyterlab_config')
|
|
|
+ return config_man.get('jupyter_notebook_config')
|
|
|
|
|
|
|
|
|
-def _write_config_data(data, user=False, sys_prefix=False):
|
|
|
+def _write_config_data(data, user=False, sys_prefix=False, logger=None):
|
|
|
"""Update the config for the current context
|
|
|
|
|
|
Parameters
|
|
@@ -1124,10 +1141,14 @@ def _write_config_data(data, user=False, sys_prefix=False):
|
|
|
Get the user's .jupyter config directory
|
|
|
sys_prefix : bool [default: False]
|
|
|
Get sys.prefix, i.e. ~/.envs/my-env/etc/jupyter
|
|
|
+ logger: logger instance
|
|
|
+ The logger instance.
|
|
|
"""
|
|
|
config_dir = _get_config_dir(user=user, sys_prefix=sys_prefix)
|
|
|
+ if logger:
|
|
|
+ logger.info(u"- Writing config: {}".format(config_dir))
|
|
|
config_man = BaseJSONConfigManager(config_dir=config_dir)
|
|
|
- config_man.update('jupyterlab_config', data)
|
|
|
+ config_man.update('jupyter_notebook_config', data)
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|