Source code for shyft.dashboard.entry_points.visualize_apps

import argparse
import logging

from shyft.dashboard.base.app import start_bokeh_apps
from shyft.dashboard.entry_points.entry_points import parse_entry_points_for_apps
from shyft.dashboard.util.find_free_port import find_free_port


[docs] def main(input_args=None): """Entry point to run all apps defined under `shyft.dashboard_apps` entry-point""" all_apps = parse_entry_points_for_apps() entry_points = [a[0] for a in all_apps] double_defined_entry_points = [e for e in entry_points if entry_points.count(e) > 1] max_len = max([len(i) for i in entry_points]) if double_defined_entry_points: max_len += 16 app_names = [] available_apps = {} for entry_point, app in all_apps: entry_point_name = entry_point app_key = entry_point if entry_point in double_defined_entry_points: entry_point_name = f'{entry_point_name} (use module name)' app_key = app.__module__ app_names.append(f'{entry_point_name:<{max_len}}: {app.__module__}') available_apps[app_key] = app app_names = '\n '.join(app_names) h = f"""Select bokeh-app defined under `shyft.dashboard_apps` entry-points All available apps are:\n\n {app_names} """ # 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)") 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)