Source code for shyft.dashboard.entry_points.start_bokeh_examples

import argparse

from shyft.dashboard.examples.hover_tool import HoverToolExample
from shyft.dashboard.examples.message_viewer import MessageViewerExample
from shyft.dashboard.examples.basic_bokeh_app import BasicBokeh
from shyft.dashboard.examples.range_tool import RangeToolExample
from shyft.dashboard.examples.ts_viewer_background_data_renderer import BackgroundDataRendererExample
from shyft.dashboard.examples.time_interval_selector_slider import TimeIntervalSliderExample
from shyft.dashboard.util.find_free_port import find_free_port
from shyft.dashboard.base.app import start_bokeh_apps
from shyft.dashboard.examples.time_series_viewer import TsViewerExample
from shyft.dashboard.examples.time_series_period_selector import TsPeriodSelectorExample
from shyft.dashboard.examples.slider_selector import SliderSelectorExample
from shyft.dashboard.examples.multi_select_tabs import MultiSelectTabsExample
from shyft.dashboard.examples.label_selector import LabelSelectorExample
from shyft.dashboard.examples.date_selector import DateSelectorExample
from shyft.dashboard.examples.selector_views import CompSelectorViewsExample
from shyft.dashboard.examples.selector_model import CompSelectorModelExample
from shyft.dashboard.examples.gates import CompGatesExample
from shyft.dashboard.examples.figure_legend import FigureLegend
from shyft.dashboard.examples.time_series_scatter_renderer import TsScatterViewerExample

# -- CHANGE OF LOGGER FORMAT FOR DEBUGGING
import logging
log_fmt = logging.Formatter("in: %(filename)s -- %(funcName)s -- %(lineno)d \n")
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(log_fmt)
logger = logging.getLogger()
logger.addHandler(stream_handler)
logger.setLevel(logging.DEBUG)


[docs] def main(input_args=None): """Run shyft dashboard example apps""" available_apps = {'ts_viewer': TsViewerExample, 'hover_tool_example': HoverToolExample, 'time_interval_slider': TimeIntervalSliderExample, 'range_tool': RangeToolExample, 'ts_period_selector': TsPeriodSelectorExample, 'slider_selector': SliderSelectorExample, 'multi_select_tabs': MultiSelectTabsExample, 'label_selector': LabelSelectorExample, 'date_selector': DateSelectorExample, 'selector_views': CompSelectorViewsExample, 'selector_model': CompSelectorModelExample, 'gates': CompGatesExample, 'message_viewer': MessageViewerExample, 'base_bokeh_app': BasicBokeh, 'figure_legend': FigureLegend, 'scatter_renderer': TsScatterViewerExample, 'bg_data_renderer': BackgroundDataRendererExample} max_len = max([len(k) for k in available_apps.keys()]) app_names = '\n '.join([f'{k:<{max_len}} : {a.__module__}' for k, a in available_apps.items()]) h = f"""Select example bokeh-app: All available apps are:\n\n {app_names} If no specific app is defined with -a all will be started! """ # add user name as in old bat scripts from sih default_port = find_free_port() parser = argparse.ArgumentParser(prog="Start Bokeh Apps", formatter_class=argparse.RawDescriptionHelpFormatter, description=h, add_help=True) parser.add_argument("--no-show", action="store_false", default=True, help="Don't show bokeh apps in default browser") parser.add_argument("-a", "--apps", nargs="+", dest='apps', help=f"Run one or more specific app(s)", default=available_apps.keys()) parser.add_argument("-p", "--port", type=int, default=default_port, help="Port to run bokeh server [will crash if it is not free]") parser.add_argument('-d', '--debug', help="Print lots of debugging statements", action="store_const", dest="log_level", const=logging.DEBUG, default=logging.ERROR) parser.add_argument('-v', '--verbose', help="Be verbose", action="store_const", dest="log_level", const=logging.INFO) parser.add_argument("-l", "--logger_box", action="store_true", default=False, help="Enable logger box in application") parser.add_argument("--async_off", action="store_true", default=False, help="Disable async data loading") parser.add_argument("--async-max-worker", type=int, default=12, help="Number of worker for async data loading") args = parser.parse_args(input_args) if not args.apps or args.apps is None: parser.print_help() print(f"No apps defined, use -a to define apps listed above!") return apps = [available_apps[k] for k in args.apps if k in available_apps] if not apps: parser.print_help() print(f"'-a : {', '.join(args.apps)}' unknown apps defined! use apps listed above!") return start_bokeh_apps(apps=apps, show=args.no_show, port=args.port, log_level=args.log_level, show_logger_box=args.logger_box, async_on=not args.async_off, async_max_worker=args.async_max_worker)
if __name__ == "__main__": main()