Skip to content

Commit e39a702

Browse files
committed
documenting public members of nbextension
1 parent 7772598 commit e39a702

File tree

1 file changed

+172
-15
lines changed

1 file changed

+172
-15
lines changed

notebook/nbextensions.py

Lines changed: 172 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
243246
def 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
290293
def 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

318345
def _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

346428
def 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

353452
def 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

360475
def 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

469595
class 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

627760
class 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

670824
class 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

677831
class 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

684838
class 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

720876
class 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

Comments
 (0)