From 19c65b606a503e077d95ffaa5f729435be7ee640 Mon Sep 17 00:00:00 2001 From: Nicholas Bollweg Date: Wed, 16 Mar 2016 21:12:48 -0400 Subject: [PATCH] changing extension enable/disable configuration default to --user --- notebook/nbextensions.py | 26 +++++++------- notebook/serverextensions.py | 6 ++-- notebook/tests/test_nbextensions.py | 45 +++++++++++++++++++------ notebook/tests/test_serverextensions.py | 20 +++++------ 4 files changed, 61 insertions(+), 36 deletions(-) diff --git a/notebook/nbextensions.py b/notebook/nbextensions.py index 93f9bb43d..471a50891 100644 --- a/notebook/nbextensions.py +++ b/notebook/nbextensions.py @@ -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'} diff --git a/notebook/serverextensions.py b/notebook/serverextensions.py index c4ad88896..43f7f250f 100644 --- a/notebook/serverextensions.py +++ b/notebook/serverextensions.py @@ -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") diff --git a/notebook/tests/test_nbextensions.py b/notebook/tests/test_nbextensions.py index 6dbc38d6d..e71c2b3f8 100644 --- a/notebook/tests/test_nbextensions.py +++ b/notebook/tests/test_nbextensions.py @@ -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) diff --git a/notebook/tests/test_serverextensions.py b/notebook/tests/test_serverextensions.py index b8c105622..3791ab874 100644 --- a/notebook/tests/test_serverextensions.py +++ b/notebook/tests/test_serverextensions.py @@ -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'] -