def show_app(app, state, notebook_url, port=0, **kw): """Show Bokeh applications :param app: A Bokeh Application to embed in PyWebIO. :param state: ** Unused ** :param notebook_url: ** Unused ** :param port: Bokeh Server 端口 :param kw: 传给 Bokeh Server 的额外参数 """ from bokeh.server.server import Server from bokeh.io.notebook import _origin_url, uuid4, curstate, _server_url from pywebio.platform.tornado import ioloop loop = ioloop() loop.make_current() asyncio.set_event_loop(loop.asyncio_loop) # loop = IOLoop.current() info = get_info() allow_websocket_origin = [info.server_host] if info.origin: allow_websocket_origin.append(_origin_url(info.origin)) server = Server({"/": app}, io_loop=loop, port=port, allow_websocket_origin=allow_websocket_origin, **kw) server_id = uuid4().hex curstate().uuid_to_server[server_id] = server server.start() url = _server_url(info.server_host, server.port) from bokeh.embed import server_document script = server_document(url, resources=None) script = re.sub( r'<script(.*?)>([\s\S]*?)</script>', r""" <script \g<1>> requirejs(['bokeh', 'bokeh-widgets', 'bokeh-tables', 'bokeh-gl'], function(Bokeh) { \g<2> }); </script> """, script) put_html(script, sanitize=False)
def test__origin_url(): assert binb._origin_url("foo.com:8888") == "foo.com:8888" assert binb._origin_url("http://foo.com:8888") == "foo.com:8888" assert binb._origin_url("https://foo.com:8888") == "foo.com:8888"