changing extension enable/disable configuration default to --user

Nicholas Bollweg 10 years ago
parent 6c286930da
commit 19c65b606a

@ -308,7 +308,7 @@ def uninstall_nbextension_python(package,
def _set_nbextension_state(section, require, state,
user=False, sys_prefix=False, logger=None):
user=True, sys_prefix=False, logger=None):
"""Set whether the section's frontend should require the named nbextension
Returns True if the final state is the one requested.
@ -321,11 +321,10 @@ def _set_nbextension_state(section, require, state,
An importable AMD module inside the nbextensions static path
state : bool
The state in which to leave the extension
user : bool [default: False]
Whether to check the user's .jupyter/nbextensions directory.
Otherwise check a system-wide install (e.g. /usr/local/share/jupyter/nbextensions).
user : bool [default: True]
Whether to update the user's .jupyter/nbextensions directory
sys_prefix : bool [default: False]
Install into the sys.prefix, i.e. environment
Whether to update the sys.prefix, i.e. environment
logger : Jupyter logger [optional]
Logger instance to use
"""
@ -376,7 +375,7 @@ def _set_nbextension_state_python(state, package, user, sys_prefix,
for nbext in nbexts]
def enable_nbextension(section, require, user=False, sys_prefix=False,
def enable_nbextension(section, require, user=True, sys_prefix=False,
logger=None):
"""Enable a named nbextension
@ -389,7 +388,7 @@ def enable_nbextension(section, require, user=False, sys_prefix=False,
The section of the server to change, one of NBCONFIG_SECTIONS
require : string
An importable AMD module inside the nbextensions static path
user : bool [default: False]
user : bool [default: True]
Whether to enable in the user's nbextensions directory.
sys_prefix : bool [default: False]
Whether to enable in the sys.prefix, i.e. environment
@ -402,7 +401,7 @@ def enable_nbextension(section, require, user=False, sys_prefix=False,
logger=logger)
def disable_nbextension(section, require, user=False, sys_prefix=False,
def disable_nbextension(section, require, user=True, sys_prefix=False,
logger=None):
"""Disable a named nbextension
@ -415,7 +414,7 @@ def disable_nbextension(section, require, user=False, sys_prefix=False,
The section of the server to change, one of NBCONFIG_SECTIONS
require : string
An importable AMD module inside the nbextensions static path
user : bool [default: False]
user : bool [default: True]
Whether to enable in the user's nbextensions directory.
sys_prefix : bool [default: False]
Whether to enable in the sys.prefix, i.e. environment
@ -428,7 +427,7 @@ def disable_nbextension(section, require, user=False, sys_prefix=False,
logger=logger)
def enable_nbextension_python(package, user=False, sys_prefix=False,
def enable_nbextension_python(package, user=True, sys_prefix=False,
logger=None):
"""Enable some nbextensions associated with a Python package.
@ -441,7 +440,7 @@ def enable_nbextension_python(package, user=False, sys_prefix=False,
package : str
Importable Python package (no dotted-notation!) exposing the
magic-named `_jupyter_nbextension_paths` function
user : bool [default: False]
user : bool [default: True]
Whether to enable in the user's nbextensions directory.
sys_prefix : bool [default: False]
Whether to enable in the sys.prefix, i.e. environment
@ -452,7 +451,7 @@ def enable_nbextension_python(package, user=False, sys_prefix=False,
logger=logger)
def disable_nbextension_python(package, user=False, sys_prefix=False,
def disable_nbextension_python(package, user=True, sys_prefix=False,
logger=None):
"""Disable some nbextensions associated with a Python package.
@ -464,7 +463,7 @@ def disable_nbextension_python(package, user=False, sys_prefix=False,
package : str
Importable Python package (no dotted-notation!) exposing the
magic-named `_jupyter_nbextension_paths` function
user : bool [default: False]
user : bool [default: True]
Whether to enable in the user's nbextensions directory.
sys_prefix : bool [default: False]
Whether to enable in the sys.prefix, i.e. environment
@ -780,6 +779,7 @@ class ToggleNBExtensionApp(BaseNBExtensionApp):
section = Unicode('notebook', config=True,
help="""Which config section to add the extension to, 'common' will affect all pages."""
)
user = Bool(True, config=True, help="Whether to do a user configuration")
aliases = {'section': 'ToggleNBExtensionApp.section'}

@ -30,7 +30,7 @@ class ArgumentConflict(ValueError):
def toggle_serverextension_python(import_name, enabled=None, parent=None,
user=False, sys_prefix=False, logger=None):
user=True, sys_prefix=False, logger=None):
"""Toggle a server extension.
By default, toggles the extension in the system-wide Jupyter configuration
@ -46,7 +46,7 @@ def toggle_serverextension_python(import_name, enabled=None, parent=None,
Toggle state for the extension. Set to None to toggle, True to enable,
and False to disable the extension.
parent : Configurable [default: None]
user : bool [default: False]
user : bool [default: True]
Toggle in the user's configuration location (e.g. ~/.jupyter).
sys_prefix : bool [default: False]
Toggle in the current Python environment's configuration location
@ -161,7 +161,7 @@ class ToggleServerExtensionApp(BaseNBExtensionApp):
aliases = {}
flags = flags
user = Bool(False, config=True, help="Whether to do a user install")
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")
python = Bool(False, config=True, help="Install from a Python package")

@ -23,6 +23,7 @@ from ipython_genutils import py3compat
from ipython_genutils.tempdir import TemporaryDirectory
from notebook import nbextensions
from notebook.nbextensions import (install_nbextension, check_nbextension,
enable_nbextension, disable_nbextension,
install_nbextension_python, uninstall_nbextension_python,
enable_nbextension_python, disable_nbextension_python, _get_config_dir,
validate_nbextension, validate_nbextension_python
@ -349,6 +350,29 @@ class TestInstallNBExtension(TestCase):
with self.assertRaises(ValueError):
install_nbextension(zsrc, destination='foo')
def test_nbextension_enable(self):
with TemporaryDirectory() as d:
f = u'ƒ.js'
src = pjoin(d, f)
touch(src)
install_nbextension(src, user=True)
enable_nbextension(section='notebook', require=u'ƒ')
config_dir = os.path.join(_get_config_dir(user=True), 'nbconfig')
cm = BaseJSONConfigManager(config_dir=config_dir)
enabled = cm.get('notebook').get('load_extensions', {}).get(u'ƒ', False)
assert enabled
def test_nbextension_disable(self):
self.test_nbextension_enable()
disable_nbextension(section='notebook', require=u'ƒ')
config_dir = os.path.join(_get_config_dir(user=True), 'nbconfig')
cm = BaseJSONConfigManager(config_dir=config_dir)
enabled = cm.get('notebook').get('load_extensions', {}).get(u'ƒ', False)
assert not enabled
def _mock_extension_spec_meta(self, section='notebook'):
return {
'section': section,
@ -396,8 +420,8 @@ class TestInstallNBExtension(TestCase):
def test_nbextensionpy_enable(self):
self._inject_mock_extension('notebook')
install_nbextension_python('mockextension')
enable_nbextension_python('mockextension', user=True)
install_nbextension_python('mockextension', user=True)
enable_nbextension_python('mockextension')
config_dir = os.path.join(_get_config_dir(user=True), 'nbconfig')
cm = BaseJSONConfigManager(config_dir=config_dir)
@ -406,8 +430,8 @@ class TestInstallNBExtension(TestCase):
def test_nbextensionpy_disable(self):
self._inject_mock_extension('notebook')
install_nbextension_python('mockextension')
enable_nbextension_python('mockextension', user=True)
install_nbextension_python('mockextension', user=True)
enable_nbextension_python('mockextension')
disable_nbextension_python('mockextension', user=True)
config_dir = os.path.join(_get_config_dir(user=True), 'nbconfig')
@ -418,8 +442,8 @@ class TestInstallNBExtension(TestCase):
def test_nbextensionpy_validate(self):
self._inject_mock_extension('notebook')
paths = install_nbextension_python('mockextension')
enable_nbextension_python('mockextension', user=True)
paths = install_nbextension_python('mockextension', user=True)
enable_nbextension_python('mockextension')
meta = self._mock_extension_spec_meta()
warnings = validate_nbextension_python(meta, paths[0])
@ -429,8 +453,9 @@ class TestInstallNBExtension(TestCase):
# Break the metadata (correct file will still be copied)
self._inject_mock_extension('notebook')
paths = install_nbextension_python('mockextension')
enable_nbextension_python('mockextension', user=True)
paths = install_nbextension_python('mockextension', user=True)
enable_nbextension_python('mockextension')
meta = self._mock_extension_spec_meta()
meta.update(require="bad-require")
@ -442,8 +467,8 @@ class TestInstallNBExtension(TestCase):
# Break the metadata (correct file will still be copied)
self._inject_mock_extension('notebook')
install_nbextension_python('mockextension')
enable_nbextension_python('mockextension', user=True)
install_nbextension_python('mockextension', user=True)
enable_nbextension_python('mockextension')
warnings = validate_nbextension("_mockdestination/index")
self.assertEqual([], warnings, warnings)

@ -1,11 +1,15 @@
from unittest import TestCase
from traitlets.config.manager import BaseJSONConfigManager
from notebook.serverextensions import toggle_serverextension_python
from notebook.nbextensions import _get_config_dir
class TestInstallServerExtension(TestCase):
def _inject_mock_extension(self):
outer_file = __file__
class mock():
__file__ = outer_file
@ -18,26 +22,22 @@ class TestInstallServerExtension(TestCase):
import sys
sys.modules['mockextension'] = mock
def _get_config(self, user=False):
cm = BaseJSONConfigManager(config_dir=_get_config_dir(user=True))
def _get_config(self, user=True):
cm = BaseJSONConfigManager(config_dir=_get_config_dir(user))
data = cm.get("jupyter_notebook_config")
return (
data.setdefault("NotebookApp", {})
.setdefault("nbserver_extensions", {})
)
return data.get("NotebookApp", {}).get("nbserver_extensions", {})
def test_enable(self):
self._inject_mock_extension()
toggle_serverextension_python('mockextension', True, user=True)
toggle_serverextension_python('mockextension', True)
config = self._get_config()
assert config['mockextension']
def test_disable(self):
self._inject_mock_extension()
toggle_serverextension_python('mockextension', True, user=True)
toggle_serverextension_python('mockextension', False, user=True)
toggle_serverextension_python('mockextension', True)
toggle_serverextension_python('mockextension', False)
config = self._get_config()
assert not config['mockextension']

Loading…
Cancel
Save