Source code for bokeh.util.notebook

''' Functions useful for loading Bokeh code and data in Jupyter/Zeppelin notebooks.

'''
from __future__ import absolute_import

from ..core.templates import SCRIPT_TAG, AUTOLOAD_NB_JS

HTML_MIME_TYPE = 'text/html'
JS_MIME_TYPE   = 'application/javascript'
LOAD_MIME_TYPE = 'application/vnd.bokehjs_load.v0+json'
EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json'

_notebook_loaded = None

# TODO (bev) notebook_type and zeppelin bits should be removed after external zeppelin hook available
[docs]def load_notebook(resources=None, verbose=False, hide_banner=False, load_timeout=5000, notebook_type='jupyter'): ''' Prepare the IPython notebook for displaying Bokeh plots. Args: resources (Resource, optional) : how and where to load BokehJS from (default: CDN) verbose (bool, optional) : whether to report detailed settings (default: False) hide_banner (bool, optional): whether to hide the Bokeh banner (default: False) load_timeout (int, optional) : Timeout in milliseconds when plots assume load timed out (default: 5000) notebook_type (string): notebook_type (default: jupyter) .. warning:: Clearing the output cell containing the published BokehJS resources HTML code may cause Bokeh CSS styling to be removed. Returns: None ''' global _notebook_loaded from IPython.display import publish_display_data from .. import __version__ from ..core.templates import NOTEBOOK_LOAD from ..util.serialization import make_id from ..resources import CDN from ..util.compiler import bundle_all_models if resources is None: resources = CDN if not hide_banner: if resources.mode == 'inline': js_info = 'inline' css_info = 'inline' else: js_info = resources.js_files[0] if len(resources.js_files) == 1 else resources.js_files css_info = resources.css_files[0] if len(resources.css_files) == 1 else resources.css_files warnings = ["Warning: " + msg['text'] for msg in resources.messages if msg['type'] == 'warn'] if _notebook_loaded and verbose: warnings.append('Warning: BokehJS previously loaded') element_id = make_id() html = NOTEBOOK_LOAD.render( element_id = element_id, verbose = verbose, js_info = js_info, css_info = css_info, bokeh_version = __version__, warnings = warnings, ) else: element_id = None _notebook_loaded = resources custom_models_js = bundle_all_models() nb_js = _loading_js(resources, element_id, custom_models_js, load_timeout, register_mime=True) jl_js = _loading_js(resources, element_id, custom_models_js, load_timeout, register_mime=False) if notebook_type=='jupyter': if not hide_banner: publish_display_data({'text/html': html}) publish_display_data({ JS_MIME_TYPE : nb_js, LOAD_MIME_TYPE : jl_js }) else: if not hide_banner: _publish_zeppelin_data(html) _publish_zeppelin_data(SCRIPT_TAG.render(js_code=jl_js))
# TODO (bev) This will eventually go away def _publish_zeppelin_data(html): '''Embed html content via %html magic''' print('%html ' + html) def _loading_js(resources, element_id, custom_models_js, load_timeout=5000, register_mime=True): return AUTOLOAD_NB_JS.render( elementid = element_id, js_urls = resources.js_files, css_urls = resources.css_files, js_raw = resources.js_raw + [custom_models_js], css_raw = resources.css_raw_str, force = True, timeout = load_timeout, register_mime = register_mime )
[docs]def get_comms(target_name): ''' Create a Jupyter comms object for a specific target, that can be used to update Bokeh documents in the Jupyter notebook. Args: target_name (str) : the target name the Comms object should connect to Returns Jupyter Comms ''' from ipykernel.comm import Comm return Comm(target_name=target_name, data={})