Here are the examples of the python api bokeh.command.util.build_single_handler_application taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
6 Examples
3
View Source File : routing.py
License : BSD 3-Clause "New" or "Revised" License
Project Creator : holzschu
License : BSD 3-Clause "New" or "Revised" License
Project Creator : holzschu
def _normalize(self, obj: ApplicationLike) -> Application:
if callable(obj):
return Application(FunctionHandler(obj))
elif isinstance(obj, Path):
return build_single_handler_application(obj)
else:
return obj
def _fixup(self, app: Application) -> Application:
3
View Source File : test_util.py
License : MIT License
Project Creator : rthorst
License : MIT License
Project Creator : rthorst
def test_build_single_handler_application_unknown_file():
with pytest.raises(ValueError) as e:
f = tempfile.NamedTemporaryFile(suffix=".bad")
util.build_single_handler_application(f.name)
assert "Expected a '.py' script or '.ipynb' notebook, got: " in str(e)
def test_build_single_handler_application_nonexistent_file():
3
View Source File : test_util.py
License : MIT License
Project Creator : rthorst
License : MIT License
Project Creator : rthorst
def test_build_single_handler_application_nonexistent_file():
with pytest.raises(ValueError) as e:
util.build_single_handler_application("junkjunkjunk")
assert "Path for Bokeh server application does not exist: " in str(e)
DIRSTYLE_MAIN_WARNING_COPY = """
3
View Source File : test_util.py
License : MIT License
Project Creator : rthorst
License : MIT License
Project Creator : rthorst
def test_build_single_handler_application_main_py(mock_warn):
f = tempfile.NamedTemporaryFile(suffix="main.py", delete=False)
f.close() #close file to open it later on windows
util.build_single_handler_application(f.name)
assert mock_warn.called
assert mock_warn.call_args[0] == (DIRSTYLE_MAIN_WARNING_COPY,)
os.remove(f.name)
_SIZE_WARNING = "Width/height arguments will be ignored for this muliple layout. (Size valus only apply when exporting single plots.)"
0
View Source File : jupyter_server_extension.py
License : BSD 3-Clause "New" or "Revised" License
Project Creator : holoviz
License : BSD 3-Clause "New" or "Revised" License
Project Creator : holoviz
async def get(self, path, *args, **kwargs):
path = os.path.join(self.application.root_dir, path)
if path in _APPS:
app, context = _APPS[path]
else:
if path.endswith('yml') or path.endswith('.yaml'):
from lumen.config import config
from lumen.command import build_single_handler_application as build_lumen
config.dev = True
app = build_lumen(path, argv=None)
else:
app = build_single_handler_application(path)
context = ApplicationContext(app, url=path)
context._loop = tornado.ioloop.IOLoop.current()
_APPS[path] = (app, context)
self.application_context = context
session = await self.get_session()
page = server_html_page_for_session(
session,
resources=RESOURCES,
title=session.document.title,
template=session.document.template,
template_variables=session.document.template_variables
)
self.set_header("Content-Type", 'text/html')
self.write(page)
class PanelWSHandler(WSHandler):
0
View Source File : server.py
License : BSD 3-Clause "New" or "Revised" License
Project Creator : holoviz
License : BSD 3-Clause "New" or "Revised" License
Project Creator : holoviz
def get_server(panel, port=0, address=None, websocket_origin=None,
loop=None, show=False, start=False, title=None,
verbose=False, location=True, static_dirs={},
oauth_provider=None, oauth_key=None, oauth_secret=None,
oauth_extra_params={}, cookie_secret=None,
oauth_encryption_key=None, session_history=None, **kwargs):
"""
Returns a Server instance with this panel attached as the root
app.
Arguments
---------
panel: Viewable, function or {str: Viewable}
A Panel object, a function returning a Panel object or a
dictionary mapping from the URL slug to either.
port: int (optional, default=0)
Allows specifying a specific port
address : str
The address the server should listen on for HTTP requests.
websocket_origin: str or list(str) (optional)
A list of hosts that can connect to the websocket.
This is typically required when embedding a server app in
an external web site.
If None, "localhost" is used.
loop : tornado.ioloop.IOLoop (optional, default=IOLoop.current())
The tornado IOLoop to run the Server on.
show : boolean (optional, default=False)
Whether to open the server in a new browser tab on start.
start : boolean(optional, default=False)
Whether to start the Server.
title : str or {str: str} (optional, default=None)
An HTML title for the application or a dictionary mapping
from the URL slug to a customized title.
verbose: boolean (optional, default=False)
Whether to report the address and port.
location : boolean or panel.io.location.Location
Whether to create a Location component to observe and
set the URL location.
static_dirs: dict (optional, default={})
A dictionary of routes and local paths to serve as static file
directories on those routes.
oauth_provider: str
One of the available OAuth providers
oauth_key: str (optional, default=None)
The public OAuth identifier
oauth_secret: str (optional, default=None)
The client secret for the OAuth provider
oauth_extra_params: dict (optional, default={})
Additional information for the OAuth provider
cookie_secret: str (optional, default=None)
A random secret string to sign cookies (required for OAuth)
oauth_encryption_key: str (optional, default=False)
A random encryption key used for encrypting OAuth user
information and access tokens.
session_history: int (optional, default=None)
The amount of session history to accumulate. If set to non-zero
and non-None value will launch a REST endpoint at
/rest/session_info, which returns information about the session
history.
kwargs: dict
Additional keyword arguments to pass to Server instance.
Returns
-------
server : bokeh.server.server.Server
Bokeh Server instance running this panel
"""
from ..config import config
from .rest import REST_PROVIDERS
server_id = kwargs.pop('server_id', uuid.uuid4().hex)
kwargs['extra_patterns'] = extra_patterns = kwargs.get('extra_patterns', [])
if isinstance(panel, dict):
apps = {}
for slug, app in panel.items():
if isinstance(title, dict):
try:
title_ = title[slug]
except KeyError:
raise KeyError(
"Keys of the title dictionnary and of the apps "
f"dictionary must match. No {slug} key found in the "
"title dictionary.")
else:
title_ = title
slug = slug if slug.startswith('/') else '/'+slug
if 'flask' in sys.modules:
from flask import Flask
if isinstance(app, Flask):
wsgi = WSGIContainer(app)
if slug == '/':
raise ValueError('Flask apps must be served on a subpath.')
if not slug.endswith('/'):
slug += '/'
extra_patterns.append(('^'+slug+'.*', ProxyFallbackHandler,
dict(fallback=wsgi, proxy=slug)))
continue
if isinstance(app, pathlib.Path):
app = str(app) # enables serving apps from Paths
if (isinstance(app, str) and (app.endswith(".py") or app.endswith(".ipynb"))
and os.path.isfile(app)):
apps[slug] = build_single_handler_application(app)
else:
handler = FunctionHandler(partial(_eval_panel, app, server_id, title_, location))
apps[slug] = Application(handler)
else:
handler = FunctionHandler(partial(_eval_panel, panel, server_id, title, location))
apps = {'/': Application(handler)}
extra_patterns += get_static_routes(static_dirs)
if session_history is not None:
config.session_history = session_history
if config.session_history != 0:
pattern = REST_PROVIDERS['param']([], 'rest')
extra_patterns.extend(pattern)
state.publish('session_info', state, ['session_info'])
opts = dict(kwargs)
if loop:
loop.make_current()
opts['io_loop'] = loop
elif opts.get('num_procs', 1) == 1:
opts['io_loop'] = IOLoop.current()
if 'index' not in opts:
opts['index'] = INDEX_HTML
if address is not None:
opts['address'] = address
if websocket_origin:
if not isinstance(websocket_origin, list):
websocket_origin = [websocket_origin]
opts['allow_websocket_origin'] = websocket_origin
# Configure OAuth
from ..config import config
if config.oauth_provider:
from ..auth import OAuthProvider
opts['auth_provider'] = OAuthProvider()
if oauth_provider:
config.oauth_provider = oauth_provider
if oauth_key:
config.oauth_key = oauth_key
if oauth_extra_params:
config.oauth_extra_params = oauth_extra_params
if cookie_secret:
config.cookie_secret = cookie_secret
opts['cookie_secret'] = config.cookie_secret
server = Server(apps, port=port, **opts)
if verbose:
address = server.address or 'localhost'
url = f"http://{address}:{server.port}{server.prefix}"
print(f"Launching server at {url}")
state._servers[server_id] = (server, panel, [])
if show:
def show_callback():
server.show('/login' if config.oauth_provider else '/')
server.io_loop.add_callback(show_callback)
def sig_exit(*args, **kwargs):
server.io_loop.add_callback_from_signal(do_stop)
def do_stop(*args, **kwargs):
server.io_loop.stop()
try:
signal.signal(signal.SIGINT, sig_exit)
except ValueError:
pass # Can't use signal on a thread
if start:
server.start()
try:
server.io_loop.start()
except RuntimeError:
pass
return server
class StoppableThread(threading.Thread):