Skip to content
Closed
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
60 changes: 50 additions & 10 deletions notebook/nbextensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,8 @@ def uninstall_nbextension_python(module,


def _set_nbextension_state(section, require, state,
user=True, sys_prefix=False, logger=None):
user=True, sys_prefix=False, logger=None,
config_dir=None):
"""Set whether the section's frontend should require the named nbextension

Returns True if the final state is the one requested.
Expand All @@ -317,10 +318,14 @@ def _set_nbextension_state(section, require, state,
`user`.
logger : Jupyter logger [optional]
Logger instance to use
config_dir : string
Specify a Jupyter config directory. Overrides user and sys_prefix if set.
"""
user = False if sys_prefix else user
config_dir = os.path.join(
_get_config_dir(user=user, sys_prefix=sys_prefix), 'nbconfig')
if config_dir is None:
user = False if sys_prefix else user
config_dir = _get_config_dir(user=user, sys_prefix=sys_prefix)

config_dir = os.path.join(config_dir, 'nbconfig')
cm = BaseJSONConfigManager(config_dir=config_dir)
if logger:
logger.info("{} {} extension {}...".format(
Expand All @@ -336,7 +341,7 @@ def _set_nbextension_state(section, require, state,


def _set_nbextension_state_python(state, module, user, sys_prefix,
logger=None):
logger=None, config_dir=None):
"""Enable or disable some nbextensions stored in a Python package

Returns a list of whether the state was achieved (i.e. changed, or was
Expand All @@ -356,13 +361,15 @@ def _set_nbextension_state_python(state, module, user, sys_prefix,
Enable/disable in the sys.prefix, i.e. environment
logger : Jupyter logger [optional]
Logger instance to use
config_dir : string
Specify a Jupyter config directory. Overrides user and sys_prefix if set.
"""
m, nbexts = _get_nbextension_metadata(module)
return [_set_nbextension_state(section=nbext["section"],
require=nbext["require"],
state=state,
user=user, sys_prefix=sys_prefix,
logger=logger)
logger=logger, config_dir=config_dir)
for nbext in nbexts]


Expand Down Expand Up @@ -394,7 +401,7 @@ def enable_nbextension(section, require, user=True, sys_prefix=False,


def disable_nbextension(section, require, user=True, sys_prefix=False,
logger=None):
logger=None, config_dir=None):
"""Disable a named nbextension

Returns True if the final state is the one requested.
Expand All @@ -413,11 +420,13 @@ def disable_nbextension(section, require, user=True, sys_prefix=False,
`user`.
logger : Jupyter logger [optional]
Logger instance to use
config_dir : string
Specify a Jupyter config directory. Overrides user and sys_prefix if set.
"""
return _set_nbextension_state(section=section, require=require,
state=False,
user=user, sys_prefix=sys_prefix,
logger=logger)
logger=logger, config_dir=config_dir)


def enable_nbextension_python(module, user=True, sys_prefix=False,
Expand Down Expand Up @@ -446,7 +455,7 @@ def enable_nbextension_python(module, user=True, sys_prefix=False,


def disable_nbextension_python(module, user=True, sys_prefix=False,
logger=None):
logger=None, config_dir=None):
"""Disable some nbextensions associated with a Python module.

Returns True if the final state is the one requested.
Expand All @@ -463,9 +472,11 @@ def disable_nbextension_python(module, user=True, sys_prefix=False,
Whether to enable in the sys.prefix, i.e. environment
logger : Jupyter logger [optional]
Logger instance to use
config_dir : string
Specify a Jupyter config directory. Overrides user and sys_prefix if set.
"""
return _set_nbextension_state_python(False, module, user, sys_prefix,
logger=logger)
logger=logger, config_dir=config_dir)


def validate_nbextension(require, logger=None):
Expand Down Expand Up @@ -833,6 +844,35 @@ class DisableNBExtensionApp(ToggleNBExtensionApp):
"""
_toggle_value = None

flags = _base_flags.copy()
flags['all'] = ({
"DisableNbExtensionApp" : {
"all_config_locations" : True,
}}, "Go through all config locations to disable loading an extension"
)

all_config_locations = Bool(False, config=True,
help="Go through all config locations to disable loading an extension",
)

def toggle_nbextension_python(self, module):
if self.all_config_locations:
for config_dir in jupyter_config_path():
disable_nbextension_python(self.section, module,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should make sure this does:

if enabled at this level:
   set enabled = None # (not False. None pops config, False stores a value)
else:
   do nothing

So that it doesn't try to write any configuration files where there wasn't any to start with.

config_dir=config_dir, logger=self.log)
return

return super(DisableNBExtensionApp, self).toggle_nbextension_python(module)

def toggle_nbextension(self, require):
if self.all_config_locations:
for config_dir in jupyter_config_path():
disable_nbextension(self.section, require,
config_dir=config_dir, logger=self.log)
return

return super(DisableNBExtensionApp, self).toggle_nbextension(require)


class ListNBExtensionsApp(BaseExtensionApp):
"""An App that lists and validates nbextensions"""
Expand Down