Beispiel #1
0
def _plot_to_json(plot):
    """Convert plot to JSON objects necessary for rendering with `bokehJS`.

    Parameters
    ----------
    plot : bokeh.plotting.figure.Figure
        Bokeh plot object to be rendered.

    Returns
    -------
    (str, str)
        Returns (docs_json, render_items) json for the desired plot.
    """
    render_items = [{'docid': plot._id, 'elementid': make_id()}]

    doc = Document()
    doc.add_root(plot)
    docs_json_inner = doc.to_json()
    docs_json = {render_items[0]['docid']: docs_json_inner}

    docs_json = serialize_json(docs_json)
    render_items = serialize_json(render_items)
    custom_model_js = bundle_all_models()

    return docs_json, render_items, custom_model_js
def finddependencies(*modules) -> List[str]:
    "compiles the application as would a normal call to bokeh"
    import bokeh.util.compiler as _compiler
    for mod in modules:
        import_module(mod)
    old = _compiler.nodejs_compile
    lst = []

    def _deps(_1, lang="javascript", file=None):  # pylint: disable=unused-argument
        lst.append(file)
        return _compiler.AttrDict({'code': '', 'deps': []})

    _compiler.nodejs_compile = _deps
    _compiler.bundle_all_models()
    _compiler.nodejs_compile = old
    return lst
def compileapp(*modules) -> str:
    "compiles the application as would a normal call to bokeh"
    import bokeh
    import bokeh.util.compiler as _compiler
    for mod in modules:
        import_module(mod)

    mdls = (() if bokeh.__version__ == '1.0.4' else
            (getattr(_compiler, '_get_custom_models')(None), ))
    string = _compiler.bundle_all_models()
    return f"/*KEY={_compiler.calc_cache_key(*mdls)}*/\n" + string
Beispiel #4
0
    async def handle(self, body: bytes) -> None:
        session = await self._get_session()

        element_id = self.get_argument("bokeh-autoload-element", default=None)
        if not element_id:
            raise RuntimeError("No bokeh-autoload-element query parameter")

        app_path = self.get_argument("bokeh-app-path", default="/")
        absolute_url = self.get_argument("bokeh-absolute-url", default=None)

        server_url: Optional[str]
        if absolute_url:
            server_url = '{uri.scheme}://{uri.netloc}/'.format(
                uri=urlparse(absolute_url))
        else:
            server_url = None
        resources = self.resources(server_url)

        bundle = bundle_all_models() or ""

        render_items = [
            RenderItem(sessionid=session.id,
                       elementid=element_id,
                       use_for_title=False)
        ]
        script = script_for_render_items(None,
                                         render_items,
                                         app_path=app_path,
                                         absolute_url=absolute_url)

        resources_param = self.get_argument("resources", "default")
        js_urls: List[str]
        css_urls: List[str]
        if resources_param == "none":
            js_urls = []
            css_urls = []
        else:
            js_urls = resources.js_files
            css_urls = resources.css_files

        js = AUTOLOAD_JS.render(
            js_urls=js_urls,
            css_urls=css_urls,
            js_raw=resources.js_raw + [bundle, script],
            css_raw=resources.css_raw_str,
            elementid=element_id,
        )

        await self.send_response(200,
                                 js.encode(),
                                 headers=[(b"Content-Type",
                                           b"application/javascript")])
Beispiel #5
0
def _load_notebook_html(resources=None, verbose=False, hide_banner=False,
                        load_timeout=5000):
    global _notebook_loaded

    from bokeh import __version__
    from bokeh.core.templates import AUTOLOAD_NB_JS, NOTEBOOK_LOAD
    from bokeh.util.serialization import make_id
    from bokeh.util.compiler import bundle_all_models
    from bokeh.resources import CDN

    if resources is None:
        resources = CDN

    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')

    _notebook_loaded = resources

    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,
        hide_banner   = hide_banner,
    )

    custom_models_js = bundle_all_models()

    js = AUTOLOAD_NB_JS.render(
        elementid = '' if hide_banner else element_id,
        js_urls  = resources.js_files,
        css_urls = resources.css_files,
        js_raw   = resources.js_raw + [custom_models_js] + ([] if hide_banner else [FINALIZE_JS % element_id]),
        css_raw  = resources.css_raw_str,
        force    = True,
        timeout  = load_timeout
    )

    return html, js
    def get(self, *args, **kwargs):
        session = yield self.get_session()

        element_id = self.get_argument("bokeh-autoload-element", default=None)
        if not element_id:
            self.send_error(status_code=400,
                            reason='No bokeh-autoload-element query parameter')
            return

        app_path = self.get_argument("bokeh-app-path", default="/")
        absolute_url = self.get_argument("bokeh-absolute-url", default=None)

        if absolute_url:
            server_url = '{uri.scheme}://{uri.netloc}/'.format(
                uri=urlparse(absolute_url))
        else:
            server_url = None
        resources = self.application.resources(server_url)

        bundle = bundle_all_models()

        render_items = [
            dict(sessionid=session.id,
                 elementid=element_id,
                 use_for_title=False)
        ]
        script = script_for_render_items(None,
                                         render_items,
                                         app_path=app_path,
                                         absolute_url=absolute_url)

        resources_param = self.get_argument("resources", "default")
        if resources_param == "none":
            js_urls = []
            css_urls = []
        else:
            js_urls = resources.js_files
            css_urls = resources.css_files

        js = AUTOLOAD_JS.render(
            js_urls=js_urls,
            css_urls=css_urls,
            js_raw=resources.js_raw + [bundle, script],
            css_raw=resources.css_raw_str,
            elementid=element_id,
        )

        self.set_header("Content-Type", 'application/javascript')
        self.write(encode_utf8(js))
Beispiel #7
0
def load_notebook(inline=True, load_timeout=5000):
    from IPython.display import publish_display_data

    resources = INLINE if inline else CDN
    custom_models_js = bundle_all_models() or ""

    configs, requirements, exports = require_components()
    bokeh_js = _autoload_js(resources, custom_models_js, configs, requirements,
                            exports, load_timeout)
    publish_display_data({
        'application/javascript': bokeh_js,
        LOAD_MIME: bokeh_js
    })
    bokeh.io.notebook.curstate().output_notebook()

    # Publish comm manager
    JS = '\n'.join([PYVIZ_PROXY, _JupyterCommManager.js_manager, nb_mime_js])
    publish_display_data(data={LOAD_MIME: JS, 'application/javascript': JS})
    def get(self, *args, **kwargs):
        session = yield self.get_session()

        element_id = self.get_argument("bokeh-autoload-element", default=None)
        if not element_id:
            self.send_error(status_code=400, reason='No bokeh-autoload-element query parameter')
            return

        app_path = self.get_argument("bokeh-app-path", default="/")
        absolute_url = self.get_argument("bokeh-absolute-url", default=None)

        if absolute_url:
            server_url = '{uri.scheme}://{uri.netloc}/'.format(uri=urlparse(absolute_url))
        else:
            server_url = None
        resources = self.application.resources(server_url)

        bundle = bundle_all_models() or ""

        render_items = [RenderItem(sessionid=session.id, elementid=element_id, use_for_title=False)]
        script = script_for_render_items(None, render_items, app_path=app_path, absolute_url=absolute_url)

        resources_param = self.get_argument("resources", "default")
        if resources_param == "none":
            js_urls = []
            css_urls = []
        else:
            js_urls = resources.js_files
            css_urls = resources.css_files

        js = AUTOLOAD_JS.render(
            js_urls = js_urls,
            css_urls = css_urls,
            js_raw = resources.js_raw + [bundle, script],
            css_raw = resources.css_raw_str,
            elementid = element_id,
        )

        self.set_header("Content-Type", 'application/javascript')
        self.write(encode_utf8(js))