def _figure_data(self, plot, fmt='html', doc=None, **kwargs): model = plot.state doc = Document() if doc is None else doc for m in model.references(): m._document = None doc.add_root(model) comm_id = plot.comm.id if plot.comm else None # Bokeh raises warnings about duplicate tools and empty subplots # but at the holoviews level these are not issues logger = logging.getLogger(bokeh.core.validation.check.__file__) logger.disabled = True try: if bokeh_version > '0.12.9': js, div, _ = notebook_content(model, comm_id) html = NOTEBOOK_DIV.format(plot_script=js, plot_div=div) div = encode_utf8(html) doc.hold() else: div = notebook_div(model, comm_id) except: logger.disabled = False raise logger.disabled = False plot.document = doc return div
def test_notebook_content(self, mock_standalone_docs_json_and_render_items): (docs_json, render_items) = ("DOC_JSON", [dict(docid="foo", elementid="bar", modelid="bat")]) mock_standalone_docs_json_and_render_items.return_value = (docs_json, render_items) expected_script = DOC_JS.render(docs_json=serialize_json(docs_json), render_items=serialize_json(render_items)) expected_div = PLOT_DIV.render(elementid=render_items[0]['elementid']) (script, div, _) = embed.notebook_content(_embed_test_plot) self.assertEqual(script, expected_script) self.assertEqual(div, expected_div)
def test_notebook_content_with_notebook_comms_target(self, mock_standalone_docs_json_and_render_items): (docs_json, render_items) = ("DOC_JSON", [dict(docid="foo", elementid="bar", modelid="bat")]) mock_standalone_docs_json_and_render_items.return_value = (docs_json, render_items) comms_target = "NOTEBOOK_COMMS_TARGET" ## assert that NOTEBOOK_COMMS_TARGET is added to render_items bundle self.assertTrue('notebook_comms_target' not in render_items[0]) (script, _, _) = embed.notebook_content(_embed_test_plot, notebook_comms_target=comms_target) self.assertTrue('notebook_comms_target' in render_items[0]) ## assert that NOTEBOOK_COMMS_TARGET ends up in generated script expected_script = DOC_JS.render(docs_json=serialize_json(docs_json), render_items=serialize_json(render_items)) self.assertEqual(script, expected_script)
def bokeh_notebook_div(image): """" Generates an HTML div to embed in the notebook. Parameters ---------- image: InteractiveImage InteractiveImage instance with a plot Returns ------- div: str HTML string containing the bokeh plot to be displayed """ if bokeh_version > '0.12.9': js, div, _ = notebook_content(image.p, image.ref) html = NOTEBOOK_DIV.format(plot_script=js, plot_div=div) div = encode_utf8(html) # Ensure events are held until an update is triggered image.doc.hold() else: div = notebook_div(image.p, image.ref) return div