Skip to content
Closed
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
57 changes: 41 additions & 16 deletions src/jupyter_contrib_nbextensions/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,27 +36,35 @@ def _log_format_default(self):
'%(message)s')


USER_HELP = 'Do a user install'
SYS_PREFIX_HELP = 'Use the sys.prefix as the prefix'


class BaseContribNbextensionsInstallApp(BaseContribNbextensionsApp):
"""Base jupyter_contrib_nbextensions (un)installer app."""

aliases = {
'prefix': 'BaseContribNbextensionsInstallApp.prefix',
'nbextensions': 'BaseContribNbextensionsInstallApp.nbextensions_dir',
'config-dir': 'BaseContribNbextensionsInstallApp.config_dir'
}

flags = {
'debug': JupyterApp.flags['debug'],
'user': ({
'BaseContribNbextensionsInstallApp': {'user': True}},
'Perform the operation for the current user'
'BaseContribNbextensionsInstallApp': {
'user': True, 'sys_prefix': False}},
USER_HELP
),
'system': ({
'BaseContribNbextensionsInstallApp': {
'user': False, 'sys_prefix': False}},
'Perform the operation system-wide'
'Do a system-wide install'
),
'sys-prefix': (
{'BaseContribNbextensionsInstallApp': {'sys_prefix': True}},
'Use sys.prefix as the prefix for installing'
{'BaseContribNbextensionsInstallApp': {
'user': False, 'sys_prefix': True}},
SYS_PREFIX_HELP
),
# below flags apply only to nbextensions, not server extensions
'overwrite': (
Expand All @@ -70,9 +78,8 @@ class BaseContribNbextensionsInstallApp(BaseContribNbextensionsApp):
),
}

user = Bool(True, config=True, help='Whether to do a user install')
sys_prefix = Bool(False, config=True,
help='Use the sys.prefix as the prefix')
user = Bool(True, config=True, help=USER_HELP)
sys_prefix = Bool(False, config=True, help=SYS_PREFIX_HELP)

# settings pertaining to nbextensions installation only
overwrite = Bool(False, config=True,
Expand All @@ -85,21 +92,39 @@ class BaseContribNbextensionsInstallApp(BaseContribNbextensionsApp):
nbextensions_dir = Unicode(
'', config=True,
help='Full path to nbextensions dir '
'(consider instead using sys_prefix, prefix or user)')
'(consider instead using, system sys_prefix, prefix or user)')
config_dir = Unicode(
'', config=True,
help='Custom jupyter config directory')

def parse_command_line(self, argv=None):
"""
Overriden to check for conflicting flags

Since notebook version doesn't do it very well
"""
conflicting_flags = set(['--user', '--system', '--sys-prefix'])

if len(conflicting_flags.intersection(set(argv))) > 1:

# parse first so the dirs are set
super(BaseContribNbextensionsInstallApp, self).parse_command_line(argv)

conflicting = [
('user', '--user' in argv),
('system', '--system' in argv),
('sys-prefix', '--sys-prefix' in argv),
('prefix', self.prefix),
('nbextensions', self.nbextensions_dir),
]
conflicting_set = ['{}={!r}'.format(n, v) for n, v in conflicting if v]

if len(conflicting_set) > 1:
raise ArgumentConflict(
'cannot specify more than one of user, sys_prefix, or system')
return super(BaseContribNbextensionsInstallApp,
self).parse_command_line(argv)
'cannot specify more than one of user, system, sys_prefix, prefix, or nbextensions, but found {}',
', '.join(conflicting_set))

# it works with flags, but no idea how to do this for string CLI args with traitlets
if self.prefix or self.nbextensions_dir:
self.user = self.sys_prefix = False


BaseContribNbextensionsInstallApp.flags['s'] = (
BaseContribNbextensionsInstallApp.flags['symlink'])
Expand All @@ -121,7 +146,7 @@ def start(self):
return install(
user=self.user, sys_prefix=self.sys_prefix, prefix=self.prefix,
nbextensions_dir=self.nbextensions_dir, logger=self.log,
overwrite=self.overwrite, symlink=self.symlink)
overwrite=self.overwrite, symlink=self.symlink, config_dir=self.config_dir)


class UninstallContribNbextensionsApp(BaseContribNbextensionsInstallApp):
Expand Down
20 changes: 12 additions & 8 deletions src/jupyter_contrib_nbextensions/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

import psutil
from jupyter_contrib_core.notebook_compat import nbextensions, serverextensions
from jupyter_core.paths import SYSTEM_CONFIG_PATH
from traitlets.config import Config
from traitlets.config.manager import BaseJSONConfigManager

Expand Down Expand Up @@ -47,14 +48,15 @@ def notebook_is_running():

def toggle_install(install, user=False, sys_prefix=False, overwrite=False,
symlink=False, prefix=None, nbextensions_dir=None,
logger=None):
logger=None, config_dir=None):
"""Install or remove all jupyter_contrib_nbextensions."""
if notebook_is_running():
raise NotebookRunningError(
'Cannot configure while the Jupyter notebook server is running')

user = False if sys_prefix else user
config_dir = nbextensions._get_config_dir(user=user, sys_prefix=sys_prefix)
if not config_dir: # no “is None”: might be '' due to config
config_dir = nbextensions._get_config_dir(user=user, sys_prefix=sys_prefix)

verb = 'Installing' if install else 'Uninstalling'
if logger:
Expand All @@ -66,11 +68,13 @@ def toggle_install(install, user=False, sys_prefix=False, overwrite=False,
if install:
serverextensions.toggle_serverextension_python(
'jupyter_nbextensions_configurator',
enabled=True, user=user, sys_prefix=sys_prefix, logger=logger)
enabled=True, user=user, sys_prefix=sys_prefix, logger=logger,
config_dir=config_dir)

# nbextensions:
kwargs = dict(user=user, sys_prefix=sys_prefix, prefix=prefix,
nbextensions_dir=nbextensions_dir, logger=logger)
nbextensions_dir=nbextensions_dir, logger=logger,
config_dir=config_dir)
if install:
nbextensions.install_nbextension_python(
jupyter_contrib_nbextensions.__name__,
Expand Down Expand Up @@ -126,20 +130,20 @@ def toggle_install(install, user=False, sys_prefix=False, overwrite=False,


def install(user=False, sys_prefix=False, prefix=None, nbextensions_dir=None,
logger=None, overwrite=False, symlink=False):
logger=None, overwrite=False, symlink=False, config_dir=None):
"""Edit jupyter config files to use jupyter_contrib_nbextensions things."""
return toggle_install(
True, user=user, sys_prefix=sys_prefix, prefix=prefix,
nbextensions_dir=nbextensions_dir, logger=logger,
overwrite=overwrite, symlink=symlink)
overwrite=overwrite, symlink=symlink, config_dir=config_dir)


def uninstall(user=False, sys_prefix=False, prefix=None, nbextensions_dir=None,
logger=None):
logger=None, config_dir=None):
"""Edit jupyter config files to not use jupyter_contrib_nbextensions."""
return toggle_install(
False, user=user, sys_prefix=sys_prefix, prefix=prefix,
nbextensions_dir=nbextensions_dir, logger=logger)
nbextensions_dir=nbextensions_dir, logger=logger, config_dir=config_dir)

# -----------------------------------------------------------------------------
# Private API
Expand Down