@@ -72,6 +72,8 @@ def check_nbextension(files, user=False, prefix=None, nbextensions_dir=None, sys
7272 Will check prefix/share/jupyter/nbextensions
7373 nbextensions_dir : str [optional]
7474 Specify absolute path of nbextensions directory explicitly.
75+ sys_prefix : bool [default: False]
76+ Install into the sys.prefix, i.e. environment
7577 """
7678 nbext = _get_nbextension_dir (user = user , sys_prefix = sys_prefix , prefix = prefix , nbextensions_dir = nbextensions_dir )
7779 # make sure nbextensions dir exists
@@ -240,6 +242,7 @@ def install_nbextension_python(package, overwrite=False, symlink=False,
240242
241243 return full_dests
242244
245+
243246def uninstall_nbextension (dest , require , user = False , sys_prefix = False , prefix = None ,
244247 nbextensions_dir = None , logger = None ):
245248 """Uninstall a Javascript extension of the notebook
@@ -290,7 +293,10 @@ def uninstall_nbextension(dest, require, user=False, sys_prefix=False, prefix=No
290293def uninstall_nbextension_python (package ,
291294 user = False , sys_prefix = False , prefix = None , nbextensions_dir = None ,
292295 logger = None ):
293- """Uninstall an nbextension bundled in a Python package."""
296+ """Uninstall an nbextension bundled in a Python package.
297+
298+ See parameters of `install_nbextension_python`
299+ """
294300 m , nbexts = _get_nbextension_metadata (package )
295301 for nbext in nbexts :
296302 dest = nbext ['dest' ]
@@ -301,8 +307,28 @@ def uninstall_nbextension_python(package,
301307 prefix = prefix , nbextensions_dir = nbextensions_dir , logger = logger )
302308
303309
304- def _set_nbextension_state (section , require , state , user , sys_prefix ,
305- logger = None ):
310+ def _set_nbextension_state (section , require , state ,
311+ user = False , sys_prefix = False , logger = None ):
312+ """Set whether the section's frontend should require the named nbextension
313+
314+ Returns True if the final state is the one requested.
315+
316+ Parameters
317+ ----------
318+ section : string
319+ The section of the server to change, one of NBCONFIG_SECTIONS
320+ require : string
321+ An importable AMD module inside the nbextensions static path
322+ state : bool
323+ The state in which to leave the extension
324+ user : bool [default: False]
325+ Whether to check the user's .ipython/nbextensions directory.
326+ Otherwise check a system-wide install (e.g. /usr/local/share/jupyter/nbextensions).
327+ sys_prefix : bool [default: False]
328+ Install into the sys.prefix, i.e. environment
329+ logger : Jupyter logger [optional]
330+ Logger instance to use
331+ """
306332 config_dir = os .path .join (
307333 _get_config_dir (user = user , sys_prefix = sys_prefix ), 'nbconfig' )
308334 cm = BaseJSONConfigManager (config_dir = config_dir )
@@ -313,12 +339,30 @@ def _set_nbextension_state(section, require, state, user, sys_prefix,
313339 require
314340 ))
315341 cm .update (section , {"load_extensions" : {require : state }})
342+ return cm .get (section ).get (require ) == state
316343
317344
318345def _set_nbextension_state_python (state , package , user , sys_prefix ,
319346 logger = None ):
320- """
321- Enable or disable a nbextension
347+ """Enable or disable some nbextensions stored in a python package
348+
349+ Returns a list of whether the state was achieved (i.e. changed, or was
350+ already right)
351+
352+ Parameters
353+ ----------
354+
355+ state : Bool
356+ Whether the extensions should be enabled
357+ package : str
358+ Importable Python package (no dotted-notation!) exposing the
359+ magic-named `_jupyter_nbextension_paths` function
360+ user : bool [default: False]
361+ Whether to enable in the user's nbextensions directory.
362+ sys_prefix : bool [default: False]
363+ Enable/disable in the sys.prefix, i.e. environment
364+ logger : Jupyter logger [optional]
365+ Logger instance to use
322366 """
323367 m , nbexts = _get_nbextension_metadata (package )
324368 return [_set_nbextension_state (section = nbext ["section" ],
@@ -329,14 +373,52 @@ def _set_nbextension_state_python(state, package, user, sys_prefix,
329373 for nbext in nbexts ]
330374
331375
332- def enable_nbextension (section , require , user , sys_prefix , logger = None ):
376+ def enable_nbextension (section , require , user = False , sys_prefix = False ,
377+ logger = None ):
378+ """Enable a named nbextension
379+
380+ Returns True if the final state is the one requested.
381+
382+ Parameters
383+ ----------
384+
385+ section : string
386+ The section of the server to change, one of NBCONFIG_SECTIONS
387+ require : string
388+ An importable AMD module inside the nbextensions static path
389+ user : bool [default: False]
390+ Whether to enable in the user's nbextensions directory.
391+ sys_prefix : bool [default: False]
392+ Whether to enable in the sys.prefix, i.e. environment
393+ logger : Jupyter logger [optional]
394+ Logger instance to use
395+ """
333396 return _set_nbextension_state (section = section , require = require ,
334397 state = True ,
335398 user = user , sys_prefix = sys_prefix ,
336399 logger = logger )
337400
338401
339- def disable_nbextension (section , require , user , sys_prefix , logger = None ):
402+ def disable_nbextension (section , require , user = False , sys_prefix = False ,
403+ logger = None ):
404+ """Disable a named nbextension
405+
406+ Returns True if the final state is the one requested.
407+
408+ Parameters
409+ ----------
410+
411+ section : string
412+ The section of the server to change, one of NBCONFIG_SECTIONS
413+ require : string
414+ An importable AMD module inside the nbextensions static path
415+ user : bool [default: False]
416+ Whether to enable in the user's nbextensions directory.
417+ sys_prefix : bool [default: False]
418+ Whether to enable in the sys.prefix, i.e. environment
419+ logger : Jupyter logger [optional]
420+ Logger instance to use
421+ """
340422 return _set_nbextension_state (section = section , require = require ,
341423 state = False ,
342424 user = user , sys_prefix = sys_prefix ,
@@ -345,19 +427,63 @@ def disable_nbextension(section, require, user, sys_prefix, logger=None):
345427
346428def enable_nbextension_python (package , user = False , sys_prefix = False ,
347429 logger = None ):
348- """Enable an nbextension associated with a Python package."""
430+ """Enable some nbextensions associated with a Python package.
431+
432+ Returns a list of whether the state was achieved (i.e. changed, or was
433+ already right)
434+
435+ Parameters
436+ ----------
437+
438+ package : str
439+ Importable Python package (no dotted-notation!) exposing the
440+ magic-named `_jupyter_nbextension_paths` function
441+ user : bool [default: False]
442+ Whether to enable in the user's nbextensions directory.
443+ sys_prefix : bool [default: False]
444+ Whether to enable in the sys.prefix, i.e. environment
445+ logger : Jupyter logger [optional]
446+ Logger instance to use
447+ """
349448 return _set_nbextension_state_python (True , package , user , sys_prefix ,
350449 logger = logger )
351450
352451
353452def disable_nbextension_python (package , user = False , sys_prefix = False ,
354453 logger = None ):
355- """Disable an nbextension associated with a Python package."""
454+ """Disable some nbextensions associated with a Python package.
455+
456+ Returns True if the final state is the one requested.
457+
458+ Parameters
459+ ----------
460+
461+ package : str
462+ Importable Python package (no dotted-notation!) exposing the
463+ magic-named `_jupyter_nbextension_paths` function
464+ user : bool [default: False]
465+ Whether to enable in the user's nbextensions directory.
466+ sys_prefix : bool [default: False]
467+ Whether to enable in the sys.prefix, i.e. environment
468+ logger : Jupyter logger [optional]
469+ Logger instance to use
470+ """
356471 return _set_nbextension_state_python (False , package , user , sys_prefix ,
357472 logger = logger )
358473
359474
360475def validate_nbextension (require , logger = None ):
476+ """Validate a named nbextension.
477+
478+ Looks across all of the nbextension directories.
479+
480+ Returns a list of warnings.
481+
482+ require : str
483+ require.js path used to load the extension
484+ logger : Jupyter logger [optional]
485+ Logger instance to use
486+ """
361487 warnings = []
362488 infos = []
363489
@@ -467,7 +593,7 @@ def validate_nbextension_python(spec, full_dest, logger=None):
467593_base_flags ['python' ] = _base_flags ['py' ]
468594
469595class BaseNBExtensionApp (JupyterApp ):
470-
596+ """Base nbextension installer app"""
471597 _log_formatter_cls = LogFormatter
472598 flags = _base_flags
473599 version = __version__
@@ -480,10 +606,12 @@ class BaseNBExtensionApp(JupyterApp):
480606 verbose = Any (None , config = True , help = "DEPRECATED: Verbosity level" )
481607
482608 def _verbose_changed (self ):
609+ """Warn about verbosity changes"""
483610 import warnings
484611 warnings .warn ("`verbose` traits of `{}` has been deprecated, has no effects and will be removed in notebook 5.0." .format (type (self ).__name__ ), DeprecationWarning )
485612
486613 def _log_format_default (self ):
614+ """A default format for messages"""
487615 return "%(message)s"
488616
489617
@@ -539,9 +667,11 @@ class InstallNBExtensionApp(BaseNBExtensionApp):
539667 destination = Unicode ('' , config = True , help = "Destination for the copy or symlink" )
540668
541669 def _config_file_name_default (self ):
670+ """The default config file name."""
542671 return 'jupyter_notebook_config'
543672
544673 def install_extensions (self ):
674+ """Perform the installation of nbextension(s)"""
545675 if len (self .extra_args )> 1 :
546676 raise ValueError ("only one nbextension allowed at a time. Call multiple times to install multiple extensions." )
547677
@@ -558,6 +688,7 @@ def install_extensions(self):
558688 )
559689
560690 def start (self ):
691+ """Perform the App's function as configured"""
561692 if not self .extra_args :
562693 sys .exit ('Please specify an nbextension to install' )
563694 else :
@@ -592,9 +723,11 @@ class UninstallNBExtensionApp(BaseNBExtensionApp):
592723 destination = Unicode ('' , config = True , help = "Destination for the copy or symlink" )
593724
594725 def _config_file_name_default (self ):
726+ """The default config file name."""
595727 return 'jupyter_notebook_config'
596728
597729 def uninstall_extensions (self ):
730+ """Uninstall some nbextensions"""
598731 kwargs = {
599732 'user' : self .user ,
600733 'sys_prefix' : self .sys_prefix ,
@@ -625,7 +758,7 @@ def start(self):
625758
626759
627760class ToggleNBExtensionApp (BaseNBExtensionApp ):
628-
761+ """A base class for apps that enable/disable extensions"""
629762 name = "jupyter nbextension enable/disable"
630763 version = __version__
631764 description = "Enable/disable an nbextension using frontend configuration files."
@@ -639,9 +772,21 @@ class ToggleNBExtensionApp(BaseNBExtensionApp):
639772 _toggle_value = None
640773
641774 def _config_file_name_default (self ):
775+ """The default config file name."""
642776 return 'jupyter_notebook_config'
643777
644778 def toggle_nbextension_python (self , package ):
779+ """Toggle some extensions in an importable Python package.
780+
781+ Returns a list of booleans indicating whether the state was changed as
782+ requested.
783+
784+ Parameters
785+ ----------
786+ package : str
787+ Importable Python package (no dotted-notation!) exposing the
788+ magic-named `_jupyter_nbextension_paths` function
789+ """
645790 toggle = (enable_nbextension_python if self ._toggle_value
646791 else disable_nbextension_python )
647792 return toggle (package ,
@@ -650,6 +795,15 @@ def toggle_nbextension_python(self, package):
650795 logger = self .log )
651796
652797 def toggle_nbextension (self , require ):
798+ """Toggle some a named nbextension by require-able AMD module.
799+
800+ Returns whether the state was changed as requested.
801+
802+ Parameters
803+ ----------
804+ require : str
805+ require.js path used to load the nbextension
806+ """
653807 toggle = (enable_nbextension if self ._toggle_value
654808 else disable_nbextension )
655809 return toggle (self .section , require ,
@@ -668,26 +822,27 @@ def start(self):
668822
669823
670824class EnableNBExtensionApp (ToggleNBExtensionApp ):
671-
825+ """An App that enables nbextensions"""
672826 name = "jupyter nbextension enable"
673827 description = "Enable an nbextension using frontend configuration files."
674828 _toggle_value = True
675829
676830
677831class DisableNBExtensionApp (ToggleNBExtensionApp ):
678-
832+ """An App that disables nbextensions"""
679833 name = "jupyter nbextension disable"
680834 description = "Disable an nbextension using frontend configuration files."
681835 _toggle_value = None
682836
683837
684838class ListNBExtensionsApp (BaseNBExtensionApp ):
685-
839+ """An App that lists and validates nbextensions"""
686840 name = "jupyter nbextension list"
687841 version = __version__
688842 description = "List all nbextensions known by the configuration system"
689843
690844 def list_nbextensions (self ):
845+ """List all the nbextensions"""
691846 config_dirs = [os .path .join (p , 'nbconfig' ) for p in jupyter_config_path ()]
692847
693848 for config_dir in config_dirs :
@@ -706,6 +861,7 @@ def list_nbextensions(self):
706861 validate_nbextension (require , logger = self .log )
707862
708863 def start (self ):
864+ """Perform the App's functions as configured"""
709865 self .list_nbextensions ()
710866
711867
@@ -718,7 +874,7 @@ def start(self):
718874"""
719875
720876class NBExtensionApp (BaseNBExtensionApp ):
721-
877+ """Base jupyter nbextension command entry point"""
722878 name = "jupyter nbextension"
723879 version = __version__
724880 description = "Work with Jupyter notebook extensions"
@@ -733,6 +889,7 @@ class NBExtensionApp(BaseNBExtensionApp):
733889 )
734890
735891 def start (self ):
892+ """Perform the App's functions as configured"""
736893 super (NBExtensionApp , self ).start ()
737894
738895 # The above should have called a subcommand and raised NoStart; if we
0 commit comments