def test_exception_for_missing_doc(self): p1 = SomeModel() with pytest.raises(ValueError) as e: beu.standalone_docs_json_and_render_items([p1]) assert str( e.value ) == "A Bokeh Model must be part of a Document to render as standalone content"
def test_log_warning_if_python_event_callback(self, caplog): d = Document() m1 = EmbedTestUtilModel() c1 = _GoodEventCallback() d.add_root(m1) m1.on_event(Tap, c1) assert len(m1._event_callbacks) != 0 with caplog.at_level(logging.WARN): beu.standalone_docs_json_and_render_items(m1) assert len(caplog.records) == 1 assert caplog.text != ''
def test_log_warning_if_python_event_callback(self, caplog): d = Document() m1 = EmbedTestUtilModel() c1 = _GoodEventCallback() d.add_root(m1) m1.on_event(Tap, c1) assert len(m1._event_callbacks) != 0 with caplog.at_level(logging.WARN): beu.standalone_docs_json_and_render_items(m1) assert len(caplog.records) == 1 assert caplog.text != ''
def test_log_warning_if_python_property_callback(self, caplog) -> None: d = Document() m1 = EmbedTestUtilModel() c1 = _GoodPropertyCallback() d.add_root(m1) m1.on_change('name', c1) assert len(m1._callbacks) != 0 with caplog.at_level(logging.WARN): beu.standalone_docs_json_and_render_items(m1) assert len(caplog.records) == 1 assert caplog.text != ''
def render_model(model, comm=None): if not isinstance(model, Model): raise ValueError("notebook_content expects a single Model instance") from ..config import panel_extension as pnext target = model.ref['id'] (docs_json, [render_item]) = standalone_docs_json_and_render_items([model], True) div = div_for_render_item(render_item) render_item = render_item.to_json() requirements = [pnext._globals[ext] for ext in pnext._loaded_extensions if ext in pnext._globals] ipywidget = 'ipywidgets_bokeh' in sys.modules script = DOC_NB_JS.render( docs_json=serialize_json(docs_json), render_items=serialize_json([render_item]), requirements=requirements, ipywidget=ipywidget ) bokeh_script, bokeh_div = script, div html = "<div id='{id}'>{html}</div>".format(id=target, html=bokeh_div) data = {'text/html': html, 'application/javascript': bokeh_script} return ({'text/html': mimebundle_to_html(data), EXEC_MIME: ''}, {EXEC_MIME: {'id': target}})
def render_model(model, comm=None): if not isinstance(model, Model): raise ValueError("notebook_content expects a single Model instance") target = model.ref['id'] (docs_json, [render_item]) = standalone_docs_json_and_render_items([model], True) div = div_for_render_item(render_item) render_item = render_item.to_json() script = DOC_NB_JS.render( docs_json=serialize_json(docs_json), render_items=serialize_json([render_item]), ) bokeh_script, bokeh_div = script, div html = "<div id='{id}'>{html}</div>".format(id=target, html=bokeh_div) data = {'text/html': html, 'application/javascript': bokeh_script} return ({ 'text/html': mimebundle_to_html(data), EXEC_MIME: '' }, { EXEC_MIME: { 'id': target } })
def file_html(models, resources, title=None, template=BASE_TEMPLATE, template_variables={}, theme=None, _always_new=False): models_seq = [] if isinstance(models, Model): models_seq = [models] elif isinstance(models, Document): models_seq = models.roots else: models_seq = models with OutputDocumentFor(models_seq, apply_theme=theme, always_new=_always_new): (docs_json, render_items) = standalone_docs_json_and_render_items( models_seq, suppress_callback_warning=True) title = _title_from_models(models_seq, title) bundle = bundle_resources(models_seq, resources) bundle = Bundle.from_bokeh(bundle) return html_page_for_render_items( bundle, docs_json, render_items, title=title, template=template, template_variables=template_variables)
def render_model(model, comm=None): if not isinstance(model, Model): raise ValueError("notebook_content expects a single Model instance") target = model.ref['id'] (docs_json, [render_item]) = standalone_docs_json_and_render_items([model]) div = div_for_render_item(render_item) render_item = render_item.to_json() script = DOC_NB_JS.render( docs_json=serialize_json(docs_json), render_items=serialize_json([render_item]), ) bokeh_script, bokeh_div = encode_utf8(script), encode_utf8(div) html = "<div id='{id}'>{html}</div>".format(id=target, html=bokeh_div) # Publish bokeh plot JS msg_handler = bokeh_msg_handler.format(plot_id=target) if comm: comm_js = comm.js_template.format(plot_id=target, comm_id=comm.id, msg_handler=msg_handler) bokeh_js = '\n'.join([comm_js, bokeh_script]) else: bokeh_js = bokeh_script data = {'text/html': html, 'application/javascript': bokeh_js} return ({'text/html': mimebundle_to_html(data), EXEC_MIME: ''}, {EXEC_MIME: {'id': target}})
def test_suppress_warnings(self, caplog): d = Document() m1 = EmbedTestUtilModel() c1 = _GoodPropertyCallback() c2 = _GoodEventCallback() d.add_root(m1) m1.on_change('name', c1) assert len(m1._callbacks) != 0 m1.on_event(Tap, c2) assert len(m1._event_callbacks) != 0 with caplog.at_level(logging.WARN): beu.standalone_docs_json_and_render_items(m1, suppress_callback_warning=True) assert len(caplog.records) == 0 assert caplog.text == ''
def test_suppress_warnings(self, caplog): d = Document() m1 = EmbedTestUtilModel() c1 = _GoodPropertyCallback() c2 = _GoodEventCallback() d.add_root(m1) m1.on_change('name', c1) assert len(m1._callbacks) != 0 m1.on_event(Tap, c2) assert len(m1._event_callbacks) != 0 with caplog.at_level(logging.WARN): beu.standalone_docs_json_and_render_items(m1, suppress_callback_warning=True) assert len(caplog.records) == 0 assert caplog.text == ''
def test_output(self): p1 = Model() p2 = Model() d = Document() d.add_root(p1) d.add_root(p2) out = beu.standalone_docs_json([p1, p2]) expected = beu.standalone_docs_json_and_render_items([p1, p2])[0] assert list(out.values()) ==list(expected.values())
def test_output(self): p1 = SomeModel() p2 = SomeModel() d = Document() d.add_root(p1) d.add_root(p2) out = beu.standalone_docs_json([p1, p2]) expected = beu.standalone_docs_json_and_render_items([p1, p2])[0] assert list(out.values()) == list(expected.values())
def _model_to_traits(cls, model, document=None): if document is None: document = Document() document.add_root(model) kwargs = {} (docs_json, [render_item]) = standalone_docs_json_and_render_items([model], True) kwargs['doc_json'] = docs_json kwargs['render_items'] = [render_item.to_json()] kwargs['div'] = div_for_render_item(render_item) return kwargs, document
def _model_to_traits(cls, model): if model.document is None: document = Document() document.add_root(model) (docs_json, [render_item]) = standalone_docs_json_and_render_items([model], True) render_bundle = dict( docs_json=docs_json, render_items=[render_item.to_json()], div=div_for_render_item(render_item), ) return render_bundle
def test_passing_doc(self): p1 = Model() d = Document() d.add_root(p1) docs_json, render_items = beu.standalone_docs_json_and_render_items([d]) doc = list(docs_json.values())[0] assert doc['title'] == "Bokeh Application" assert doc['version'] == __version__ assert len(doc['roots']['root_ids']) == 1 assert len(doc['roots']['references']) == 1 assert doc['roots']['references'] == [{'attributes': {}, 'id': str(p1._id), 'type': 'Model'}] assert len(render_items) == 1
def test_passing_doc(self): p1 = Model() d = Document() d.add_root(p1) docs_json, render_items = beu.standalone_docs_json_and_render_items([d]) doc = list(docs_json.values())[0] assert doc['title'] == "Bokeh Application" assert doc['version'] == __version__ assert len(doc['roots']['root_ids']) == 1 assert len(doc['roots']['references']) == 1 assert doc['roots']['references'] == [{'attributes': {}, 'id': str(p1.id), 'type': 'Model'}] assert len(render_items) == 1
def render_template(document, comm=None, manager=None): ref = document.roots[0].ref['id'] (docs_json, render_items) = standalone_docs_json_and_render_items(document, True) # We do not want the CommManager to appear in the roots because # the custom template may not reference it if manager: item = render_items[0] item.roots._roots = OrderedDict(list(item.roots._roots.items())[:-1]) html = html_for_render_items( docs_json, render_items, template=document.template, template_variables=document.template_variables ) return ({'text/html': html, EXEC_MIME: ''}, {EXEC_MIME: {'id': ref}})
def render_template(document, comm=None): plot_id = document.roots[0].ref['id'] (docs_json, render_items) = standalone_docs_json_and_render_items(document) if comm: msg_handler = bokeh_msg_handler.format(plot_id=plot_id) comm_js = comm.js_template.format(plot_id=plot_id, comm_id=comm.id, msg_handler=msg_handler) else: comm_js = '' html = html_for_render_items( comm_js, docs_json, render_items, template=document.template, template_variables=document.template_variables) return ({'text/html': html, EXEC_MIME: ''}, {EXEC_MIME: {'id': plot_id}})
def test_exception_for_missing_doc(self): p1 = Model() with pytest.raises(ValueError) as e: beu.standalone_docs_json_and_render_items([p1]) assert str(e.value) == "A Bokeh Model must be part of a Document to render as standalone content"