A server extension for jupyter notebook which provides configuration interfaces for notebook extensions (nbextensions).
The jupyter_nbextensions_configurator
jupyter server extension provides
graphical user interfaces for configuring which nbextensions are enabled
(load automatically for every notebook).
In addition, for nbextensions which include an appropriate yaml descriptor file
(see below), the interface also renders their markdown readme files, and
provides controls to configure the nbextensions' options.
This project was spun out of work from
ipython-contrib/IPython-notebook-extensions
.
For those using conda, you can now get jupyter_nbextensions_configurator
from
the excellent conda-forge
channel in a single command:
conda install -c conda-forge jupyter_nbextensions_configurator
For those not using conda, the installation has two steps:
Installing the pip package. This should be as simple as
pip install jupyter_nbextensions_configurator
Configuring the notebook server to load the server extension. A jupyter
subcommand is provided for this. You can enable the serverextension and the
configurator nbextensions listed below for the current user with
jupyter nbextensions_configurator enable --user # can be skipped for notebook >=5.3
The command accepts the same flags as the jupyter serverextension
command
provided by notebook versions >= 4.2, including --system
to enable in
system-wide config (the default), or --sys-prefix
to enable in config
files inside python's sys.prefix
, such as for a virtual environment.
The provided jupyter nbextensions_configurator
command can also be used
to disable
.
Once installed, you'll need to restart the notebook server. Once restarted, you should be able to find the configurator user interfaces as described below.
Once jupyter_nbextensions_configurator
is installed and enabled, and your
notebook server has been restarted, you should be able to find the nbextensions
configuration interface at the url <base_url>nbextensions
, where
<base_url>
is described below (for simple installs, it's usually just /
, so
the UI is at /nbextensions
).
For most single-user notebook servers, the dashboard (the file-browser or 'tree' view) is at
http://localhost:8888/tree
So the base_url
is the part between the host (http://localhost:8888
) and
tree
, so in this case it's the default value of just /
.
If you have a non-default base url (such as with JupyterHub), you'll need to
prepend it to the url. So, if your dashboard is at
http://localhost:8888/custom/base/url/tree
then you'll find the configurator UI page at
http://localhost:8888/custom/base/url/nbextensions
In addition to the main standalone page, the nbextensions configurator interface is also available as a tab on the dashboard:
The dashboard tab is provided via an nbextension called
"Nbextensions dashboard tab", with requirejs uri
nbextensions_configurator/tree_tab/main
.
Since version 0.2.0, this nbextension is enabled by default on enabling
the jupyter_nbextensions_configurator
serverextension, but it can be disabled
as with any other nbextension if you don't want to use it.
jupyter_nbextensions_configurator
provides a second small nbextension, which
simply adds an item to the notebook-view edit menu, which links to the
configurator UI page:
Similarly to the tree tab nbextension detailed above, since version
0.2.0, the edit menu item nbextension is enabled by default when
enabling the main jupyter_nbextensions_configurator
serverextension, but can
be disabled at any time in the same way as other nbextensions.
You don't need to know about the yaml files in order simply to use
jupyter_nbextensions_configurator
.
An nbextension is 'found' by the jupyter_nbextensions_configurator
server
extension when a special yaml file describing the nbextension and its options
is found in the notebook server's nbextensions_path
.
The yaml file can have any name with the file extension .yaml
or .yml
, and
describes the nbextension and its options to
jupyter_nbextensions_configurator
.
The case-sensitive keys in the yaml file are as follows:
Type
, (required) a case-sensitive identifier, must be IPython Notebook Extension
or Jupyter Notebook Extension
Main
, (required) the main javascript file that is loaded, typically main.js
Name
, the name of the nbextensionSection
, which view the nbextension should be loaded in (defaults to notebook
, but can alternatively be tree
, edit
, or to load in all views, common
).Description
, a short explanation of the nbextensionLink
, a URL for more documentation. If this is a relative url with a .md
file extension (recommended!), the markdown readme is rendered in the configurator UI.Icon
, a URL for a small icon for the configurator UI (rendered 120px high, should preferably end up 400px wide. Recall HDPI displays may benefit from a 2x resolution icon).Compatibility
, Jupyter major version compatibility, e.g. 3.x
or 4.x
, 3.x 4.x
, 3.x, 4.x, 5.x
Parameters
, an optional list of configuration parameters. Each item is a dictionary with (some of) the following keys
name
, (required) the name used to store the configuration variable in the config json. It follows a json-like structure, so you can use .
to separate sub-objects e.g. myextension.buttons_to_add.play
.description
, a description of the configuration parameterdefault
, a default value used to populate the tag in the configurator UI, if no value is found in config. Note that this is more of a hint to the user than anything functional - since it's only set in the yaml file, the javascript implementing the nbextension in question might actually use a different default, depending on the implementation.input_type
, controls the type of html tag used to render the parameter in the configurator UI. Valid values include text
, textarea
, checkbox
, [html5 input tags such as number
, url
, color
, ...], plus a final type of list
list_element
, a dictionary with the same default
and input_type
keys as a Parameters
entry, used to render each element of the list for parameters with input_type list
min
, step
and max
may be used by number
tags for validationtags
, a list of string tags describing the nbextension, to allow for filteringExample:
Type: Jupyter Notebook Extension
Name: Limit Output
Section: notebook
Description: This nbextension limits the number of characters that can be printed below a codecell
tags:
- usability
- limit
- output
Link: readme.md
Icon: icon.png
Main: main.js
Compatibility: 4.x
Parameters:
- name: limit_output
description: Number of characters to limit output to
input_type: number
default: 10000
step: 1
min: 0
- name: limit_output_message
description: Message to append when output is limited
input_type: text
default: '**OUTPUT MUTED**'
If you encounter problems with this server extension, you can:
For debugging, useful information can (sometimes) be found by:
--debug
flag, to get as many logs
as possible.python setup.py
notebook.base.handlers.json_errors
for notebook >= 5.2.0, as it's deprecated.#BEC
) to 6-char, as otherwise the
HTML5 controls don't initialize correctly.jupyter_contrib_core
for notebook 5 compatibility.jupyter_contrib_core
in order to ensure setting the correct config key when enabling.nbextensions_path
before checking them, to prevent
displaying duplictae entries for nbextesions in the same place. Also add
tests for deduplication./nbextensions
page. This
allows us to serve the page quicker, then get nbextensions data (slow
request) from the json api.SingleUserServer
, like
#11
and
#14
in futureEnable
:blush:jupyterhub
-spawned singleuser notebook serverjupyter_contrib_core
package for notebook compatibility shims and some
testing utilities.jcb91
in favour of
Jupyter-contrib
repository versions, where possible.Remove tests dependency on ipython_genutils
First public release!
This extension can be manually distributed as a Python package.
Manually bumb the package version in:
version
and download_url
in setup.py
current_version
in .bumpversion.cfg
__version__
in src/jupyter_nbextensions_configurator/__init__.py
Update the Changes section of the this README with notes for the release.
To create the binary package (.whl
) in the dist/
directory, do:
python setup.py bdist_wheel
Commit the changes to the repository, and upload artifacts.
Install the necessary twine
python package
pip install twine
Then to upload the package to PyPI, do:
twine upload dist/*
Lastly, you can follow the instructions here
to make a manual release on Github via jupyter_nbextensions_configurator/releases
.