In order to help automate and simplify the generation of Bokeh documentation, several Sphinx extensions have been created. Most of these will not be of general interest, except for bokeh.sphinxext.bokeh_plot, which allows anyone to include and embed bokeh plots directly in their own Sphinx docs.
Integrate Bokeh extensions into Sphinx autodoc.
Ensures that autodoc directives such as autoclass automatically make use of Bokeh-specific directives when appropriate. The following Bokeh extensions are configured:
autoclass
bokeh_color
bokeh_enum
bokeh_model
bokeh_prop
Document Bokeh named colors.
The bokeh-color directive accepts a named color as its argument:
bokeh-color
.. bokeh-color:: aliceblue
and generates a labeled color swatch as output.
aliceblue
The bokeh-color direction may be used explicitly, but it can also be used in conjunction with the bokeh_autodoc extension.
Thoroughly document Bokeh enumerations
The bokeh-enum directive generates useful documentation for enumerations, including all the allowable values. If the number of values is large, the full list is put in a collapsible code block.
bokeh-enum
This directive takes the name of a Bokeh enum variable as the argument and the module name as an option. An optional description may be added as content:
.. bokeh-enum:: baz :module: bokeh.sphinxext.sample Specify a baz style
Examples
The directive above will generate the following output:
baz = Enumeration(a, b, c)¶ Specify a baz style
baz
Specify a baz style
Although bokeh-enum may be used explicitly, it is more often convenient in conjunction with the bokeh_autodoc extension. Together, the same output above will be generated directly from the following code:
#: Specify a baz style baz = enumeration("a", "b", "c")
Generate a gallery of Bokeh plots from a configuration file.
Simplify linking to Bokeh Github resources.
This module proved four new roles that can be uses to easily link to various resources in the Bokeh Github repository:
:bokeh-commit: : link to a specific commit
:bokeh-commit:
:bokeh-issue: : link to an issue
:bokeh-issue:
:bokeh-pull: : link to a pull request
:bokeh-pull:
:bokeh-tree: : (versioned) link to a source tree URL
:bokeh-tree:
The following code:
The repo history shows that :bokeh-commit:`bf19bcb` was made in in :bokeh-pull:`1698`, which closed :bokeh-issue:`1694`. This included updating all of the files in the :bokeh-tree:`examples` subdirectory.
yields the output:
The repo history shows that commit bf19bcb was made in in pull request 1698,which closed #1694. This included updating all of the files in the examples subdirectory.
Automatically document Bokeh Jinja2 templates.
This directive takes the module path to an attribute name that defines a Jinja2 template:
.. bokeh-jinja:: bokeh.core.templates.FILE
Any template parameters will be displayed and the template source code will be rendered in a collapsible code block. For example, the usage above will generate the following output:
FILE = <Template 'file.html'> Renders Bokeh models into a basic .html file. Parameters title (str) – value for <title> tags plot_resources (str) – typically the output of RESOURCES plot_script (str) – typically the output of PLOT_SCRIPT Users can customize the file output by providing their own Jinja2 template that accepts these same parameters. Template: file.html {% from macros import embed %} <!DOCTYPE html> <html lang="en"> {% block head %} <head> {% block inner_head %} <meta charset="utf-8"> <title>{% block title %}{{ title | e if title else "Bokeh Plot" }}{% endblock %}</title> {% block preamble %}{% endblock %} {% block resources %} {% block css_resources %} {{ bokeh_css | indent(8) if bokeh_css }} {% endblock %} {% block js_resources %} {{ bokeh_js | indent(8) if bokeh_js }} {% endblock %} {% endblock %} {% block postamble %}{% endblock %} {% endblock %} </head> {% endblock %} {% block body %} <body> {% block inner_body %} {% block contents %} {% for doc in docs %} {{ embed(doc) if doc.elementid }} {% for root in doc.roots %} {% block root scoped %} {{ embed(root) | indent(10) }} {% endblock %} {% endfor %} {% endfor %} {% endblock %} {{ plot_script | indent(8) }} {% endblock %} </body> {% endblock %} </html>
FILE
Renders Bokeh models into a basic .html file.
title (str) – value for <title> tags
<title>
plot_resources (str) – typically the output of RESOURCES
plot_script (str) – typically the output of PLOT_SCRIPT
Users can customize the file output by providing their own Jinja2 template that accepts these same parameters.
{% from macros import embed %} <!DOCTYPE html> <html lang="en"> {% block head %} <head> {% block inner_head %} <meta charset="utf-8"> <title>{% block title %}{{ title | e if title else "Bokeh Plot" }}{% endblock %}</title> {% block preamble %}{% endblock %} {% block resources %} {% block css_resources %} {{ bokeh_css | indent(8) if bokeh_css }} {% endblock %} {% block js_resources %} {{ bokeh_js | indent(8) if bokeh_js }} {% endblock %} {% endblock %} {% block postamble %}{% endblock %} {% endblock %} </head> {% endblock %} {% block body %} <body> {% block inner_body %} {% block contents %} {% for doc in docs %} {{ embed(doc) if doc.elementid }} {% for root in doc.roots %} {% block root scoped %} {{ embed(root) | indent(10) }} {% endblock %} {% endfor %} {% endfor %} {% endblock %} {{ plot_script | indent(8) }} {% endblock %} </body> {% endblock %} </html>
Thoroughly document Bokeh model classes.
The bokeh-model directive will automatically document all the attributes (including Bokeh properties) of a Bokeh Model subclass. A JSON prototype showing all the possible JSON fields will also be generated.
bokeh-model
This directive takes the name of a Bokeh model class as an argument and its module as an option:
.. bokeh-model:: Foo :module: bokeh.sphinxext.sample
For the following definition of bokeh.sphinxext.sample.Foo:
bokeh.sphinxext.sample.Foo
class Foo(Model): """ This is a Foo model. """ index = Either(Auto, Enum('abc', 'def', 'xzy'), help="doc for index") value = Tuple(Float, Float, help="doc for value")
the above usage yields the output:
class Foo(**kwargs)[source]¶ Bases: bokeh.model.Model This is a Foo model. index¶ property type: Either ( Auto , Enum ( Enumeration(abc, def, xzy) ) ) doc for index value¶ property type: Tuple ( Float , Float ) doc for value JSON Prototype { "id": "17715", "index": "auto", "js_event_callbacks": {}, "js_property_callbacks": {}, "name": null, "subscribed_events": [], "tags": [], "value": null }
Foo
Bases: bokeh.model.Model
bokeh.model.Model
This is a Foo model.
index
property type: Either ( Auto , Enum ( Enumeration(abc, def, xzy) ) )
Either
Auto
Enum
doc for index
value
property type: Tuple ( Float , Float )
Tuple
Float
doc for value
{ "id": "17715", "index": "auto", "js_event_callbacks": {}, "js_property_callbacks": {}, "name": null, "subscribed_events": [], "tags": [], "value": null }
The bokeh-model direction may be used explicitly, but it can also be used in conjunction with the bokeh_autodoc extension.
Thoroughly document Bokeh options classes.
The bokeh-options directive will automatically document all the properties of a Bokeh Options class under a heading of “Keyword Args”.
bokeh-options
This directive takes the name of a Bokeh Options subclass as the argument, and its module as an option:
.. bokeh-options:: Opts :module: bokeh.sphinxext.sample
For the following definition of bokeh.sphinxext.sample.Opts:
bokeh.sphinxext.sample.Opts
class Opts(Options): """ This is an Options class """ host = String(default="localhost", help="a host to connect to") port = Int(default=5890, help="a port to connect to")
Keyword Args: host (String ) : a host to connect to (default: ‘localhost’) port (Int ) : a port to connect to (default: 5890)
Keyword Args:
host (String ) : a host to connect to (default: ‘localhost’) port (Int ) : a port to connect to (default: 5890)
host (String ) : a host to connect to (default: ‘localhost’)
String
port (Int ) : a port to connect to (default: 5890)
Int
Generate an inline visual representations of a single color palette.
The :bokeh-palette: role can be used with by providing any of the following:
:bokeh-palette:
a palette name from bokeh.palettes, e.g. Spectral9
bokeh.palettes
Spectral9
a palette function from bokeh.palettes called with argument, e.g. viridis(12)
viridis(12)
An explicit list of colors: ['#000000', '#333333', '#666666', '#999999', '#cccccc', '#ffffff']
['#000000', '#333333', '#666666', '#999999', '#cccccc', '#ffffff']
The following usage of the the directive:
* by name: :bokeh-palette:`Spectral9` * by function: :bokeh-palette:`viridis(12)` * by list: :bokeh-palette:`['#000000', '#333333', '#666666', '#999999', '#cccccc', '#ffffff']`
Generates the output:
by name: by function: by list:
by name:
by function:
by list:
Palette swatches are 20 pixels in height. For palettes short than 20 colors, the default width for the swatches is 20 pixels. If larger palettes are given, the width of the HTML spans is progressively reduced, down to a minimum of one pixel. For instance displaying the full Viridis palette with the expression
:bokeh-palette:`viridis(256)`
Will generate the output:
Generate visual representations of palettes in Bokeh palette groups.
The bokeh.palettes modules expose attributes such as mpl, brewer, and d3 that provide groups of palettes. The bokeh-palette-group directive accepts the name of one of these groups, and generates a visual matrix of colors for every palette in the group.
mpl
brewer
d3
bokeh-palette-group
As an example, the following usage of the the directive:
.. bokeh-palette-group:: mpl
" Cividis 3 4 5 6 7 8 9 10 11 Inferno 3 4 5 6 7 8 9 10 11 Magma 3 4 5 6 7 8 9 10 11 Plasma 3 4 5 6 7 8 9 10 11 Viridis 3 4 5 6 7 8 9 10 11
Include Bokeh plots in Sphinx HTML documentation.
For other output types, the placeholder text [graph] will be generated.
[graph]
The bokeh-plot directive can be used by either supplying:
bokeh-plot
A path to a source file as the argument to the directive:
.. bokeh-plot:: path/to/plot.py
Note
.py scripts are not scanned automatically! In order to include certain directories into .py scanning process use following directive in sphinx conf.py file: bokeh_plot_pyfile_include_dirs = [“dir1”,”dir2”]
Inline code as the content of the directive:
.. bokeh-plot:: from bokeh.plotting import figure, output_file, show output_file("example.html") x = [1, 2, 3, 4, 5] y = [6, 7, 6, 4, 5] p = figure(title="example", plot_width=300, plot_height=300) p.line(x, y, line_width=2) p.circle(x, y, size=10, fill_color="white") show(p)
This directive also works in conjunction with Sphinx autodoc, when used in docstrings.
The bokeh-plot directive accepts the following options:
Where to locate the the block of formatted source code (if anywhere).
Whether to display line numbers along with the source.
The inline example code above produces the following output:
from bokeh.plotting import figure, output_file, show output_file("example.html") x = [1, 2, 3, 4, 5] y = [6, 7, 6, 4, 5] p = figure(title="example", plot_width=300, plot_height=300) p.line(x, y, line_width=2) p.circle(x, y, size=10, fill_color="white") show(p)
Thoroughly document Bokeh property attributes.
The bokeh-prop directive generates documentation for Bokeh model properties, including cross links to the relevant property types. Additionally, any per-attribute help strings are also displayed.
bokeh-prop
This directive takes the name (class.attr) of a Bokeh property as its argument and the module as an option:
.. bokeh-prop:: Bar.thing :module: bokeh.sphinxext.sample
For the following definition of bokeh.sphinxext.sample.Bar:
bokeh.sphinxext.sample.Bar
class Bar(Model): """ This is a Bar model. """ thing = List(Int, help="doc for thing")
thing¶ property type: List ( Int ) doc for thing
thing
property type: List ( Int )
List
doc for thing
The bokeh-prop direction may be used explicitly, but it can also be used in conjunction with the bokeh_autodoc extension.
Publish all Bokeh release notes on to a single page.
This directive collect all the release notes files in the docs/releases subdirectory, and includes them in reverse version order. Typical usage:
docs/releases
:tocdepth: 1 .. toctree:: .. bokeh-releases::
To avoid warnings about orphaned files, add the following to the Sphinx conf.py file:
conf.py
exclude_patterns = ['docs/releases/*']
Generate a sitemap.txt to aid with search indexing.
sitemap.txt
sitemap.txt is a plain text list of all the pages in the docs site. Each URL is listed on a line in the text file. It is machine readable and used by search engines to know what pages are available for indexing.
All that is required to generate the sitemap is to list this module bokeh.sphinxext.sitemap in the list of extensions in the Sphinx configuration file conf.py.
bokeh.sphinxext.sitemap
Display code blocks in collapsible sections when outputting to HTML.
This directive takes a heading to use for the collapsible code block:
.. collapsible-code-block:: python :heading: Some Code from __future__ import print_function print("Hello, Bokeh!")
This directive is identical to the standard code-block directive that Sphinx supplies, with the addition of one new option:
code-block
A heading to put for the collapsible block. Clicking the heading expands or collapses the block.
from __future__ import print_function print("Hello, Bokeh!")