Пример #1
0
 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"
Пример #2
0
    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 != ''
Пример #3
0
    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 != ''
Пример #4
0
    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 != ''
Пример #5
0
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}})
Пример #6
0
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
        }
    })
Пример #7
0
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)
Пример #8
0
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}})
Пример #9
0
    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 == ''
Пример #10
0
    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 == ''
Пример #11
0
 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())
Пример #12
0
 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())
Пример #13
0
 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
Пример #14
0
 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
Пример #15
0
 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
Пример #16
0
 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
Пример #17
0
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}})
Пример #18
0
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}})
Пример #19
0
 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"