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
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")])
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))
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))