def on_data( _ts1, _ts2, _ts3, _ts4, pathname, inputs, chart_inputs, yaxis_data, map_data, last_chart_inputs, ): """ dash callback controlling the building of dash charts """ all_inputs = dict_merge(inputs, chart_inputs, dict(yaxis=yaxis_data or {}), map_data) if all_inputs == last_chart_inputs: raise PreventUpdate if is_app_root_defined(dash_app.server.config.get("APPLICATION_ROOT")): all_inputs["app_root"] = dash_app.server.config["APPLICATION_ROOT"] charts, range_data, code = build_chart(get_data_id(pathname), **all_inputs) return ( charts, all_inputs, range_data, "\n".join(make_list(code)), get_yaxis_type_tabs(make_list(inputs.get("y") or [])), )
def __init__(self, *args, **kwargs): server = kwargs.get('server') kwargs['external_stylesheets'] = ['/css/main.css', '/css/dash.css'] if server.config['GITHUB_FORK']: kwargs['external_stylesheets'].append('/css/github_fork.css') kwargs['external_scripts'] = [ '/dash/components_bundle.js', '/dash/custom_bundle.js', '/dist/base_styles_bundle.js' ] app_root = server.config.get('APPLICATION_ROOT') if is_app_root_defined(app_root): def _prepend_app_root(v): return '{}{}'.format(app_root, v) kwargs['requests_pathname_prefix'] = _prepend_app_root( kwargs['routes_pathname_prefix']) kwargs['external_stylesheets'] = [ _prepend_app_root(v) for v in kwargs['external_stylesheets'] ] kwargs['external_scripts'] = [ _prepend_app_root(v) for v in kwargs['external_scripts'] ] kwargs['assets_url_path'] = _prepend_app_root('') kwargs['assets_external_path'] = _prepend_app_root('/assets') super(DtaleDash, self).__init__(*args, **kwargs)
def __init__(self, *args, **kwargs): server = kwargs.get("server") kwargs["external_stylesheets"] = ["/css/main.css", "/css/dash.css"] if server.config["GITHUB_FORK"]: kwargs["external_stylesheets"].append("/css/github_fork.css") kwargs["external_scripts"] = [ "/dash/components_bundle.js", "/dash/custom_bundle.js", "/dist/base_styles_bundle.js", ] app_root = server.config.get("APPLICATION_ROOT") if is_app_root_defined(app_root): def _prepend_app_root(v): return "{}{}".format(app_root, v) kwargs["requests_pathname_prefix"] = _prepend_app_root( kwargs["routes_pathname_prefix"]) kwargs["external_stylesheets"] = [ _prepend_app_root(v) for v in kwargs["external_stylesheets"] ] kwargs["external_scripts"] = [ _prepend_app_root(v) for v in kwargs["external_scripts"] ] kwargs["assets_url_path"] = _prepend_app_root("") kwargs["assets_external_path"] = _prepend_app_root("/assets") super(DtaleDash, self).__init__(*args, **kwargs)
def load_saved_chart(_ts, config, prev_config): if config == prev_config: raise PreventUpdate if config is None: return dict(display="none"), None, None, None if is_app_root_defined(dash_app.server.config.get("APPLICATION_ROOT")): config["app_root"] = dash_app.server.config["APPLICATION_ROOT"] charts, _, _ = build_chart(**config) return dict( display="block"), charts, config, build_saved_header(config)
def combine_inputs(dash_app, inputs, chart_inputs={}, yaxis_data={}, map_data={}): """ Combines all managed state (inputs, chart inputs, map inputs & yaxis inputs) within Dash into one dictionary. """ all_inputs = dict_merge( inputs, chart_inputs, dict(yaxis=yaxis_data or {}), map_data ) if is_app_root_defined(dash_app.server.config.get("APPLICATION_ROOT")): all_inputs["app_root"] = dash_app.server.config["APPLICATION_ROOT"] return all_inputs
def on_data( _ts1, _ts2, _ts3, _ts4, _ts5, _ts6, load, inputs, chart_inputs, yaxis_data, map_data, cs_data, treemap_data, last_chart_inputs, auto_load, prev_load_clicks, ): """ dash callback controlling the building of dash charts """ all_inputs = dict_merge( inputs, chart_inputs, dict(yaxis=yaxis_data or {}), map_data, cs_data, treemap_data, ) if not auto_load and load == prev_load_clicks: raise PreventUpdate if all_inputs == last_chart_inputs: raise PreventUpdate if is_app_root_defined(dash_app.server.config.get("APPLICATION_ROOT")): all_inputs["app_root"] = dash_app.server.config["APPLICATION_ROOT"] charts, range_data, code = build_chart(**all_inputs) return ( charts, all_inputs, range_data, "\n".join(make_list(code) + [CHART_EXPORT_CODE]), get_yaxis_type_tabs(make_list(inputs.get("y") or [])), load, dict(display="block" if valid_chart(**all_inputs) else "none"), )
def on_data( _ts1, _ts2, _ts3, _ts4, _ts5, _ts6, _ts7, _ts8, load_clicks, inputs, chart_inputs, yaxis_data, map_data, cs_data, treemap_data, funnel_data, last_chart_inputs, auto_load, prev_load_clicks, ext_aggs, ): """ dash callback controlling the building of dash charts """ all_inputs = dict_merge( inputs, chart_inputs, dict(yaxis=yaxis_data or {}), map_data, cs_data, treemap_data, funnel_data, dict(extended_aggregation=ext_aggs or []) if inputs.get("chart_type") not in NON_EXT_AGGREGATION else {}, ) if not auto_load and load_clicks == prev_load_clicks: raise PreventUpdate if all_inputs == last_chart_inputs: raise PreventUpdate if is_app_root_defined(dash_app.server.config.get("APPLICATION_ROOT")): all_inputs["app_root"] = dash_app.server.config["APPLICATION_ROOT"] charts, range_data, code = build_chart(**all_inputs) agg_disabled = len(ext_aggs) > 0 ext_agg_tt = text("ext_agg_desc") ext_agg_warning = show_style(agg_disabled) if agg_disabled: ext_agg_tt = html.Div([ html.Span(text("ext_agg_desc")), html.Br(), html.Ul([ html.Li( extended_aggregations.build_extended_agg_desc(ext_agg), className="mb-0", ) for ext_agg in ext_aggs ]), ]) final_cols = build_final_cols( make_list(inputs.get("y")), inputs.get("z"), inputs.get("agg"), ext_aggs if inputs.get("chart_type") not in NON_EXT_AGGREGATION else [], ) return ( charts, all_inputs, range_data, "\n".join(make_list(code) + [CHART_EXPORT_CODE]), get_yaxis_type_tabs(final_cols), load_clicks, dict(display="block" if valid_chart(**all_inputs) else "none"), agg_disabled, ext_agg_tt, ext_agg_warning, )
def base_layout(github_fork, app_root, **kwargs): """ Base layout to be returned by :meth:`dtale.dash_application.views.DtaleDash.interpolate_index` :param github_fork: `True` if "Fork me on Github" banner should be displayed, `False` otherwise :type github_fork: bool :param kwargs: Optional keyword arguments to be passed to 'dash.Dash.interplolate_index' :type kwargs: dict :return: HTML :rtype: str """ back_to_data_padding, github_fork_html, webroot_html = ('', '', '') if github_fork: back_to_data_padding = 'padding-right: 125px' github_fork_html = ''' <span id="forkongithub"> <a href="https://github.com/man-group/dtale">Fork me on GitHub</a> </span> ''' favicon_path = '../../images/favicon.png' if is_app_root_defined(app_root): webroot_html = ''' <script type="text/javascript"> window.resourceBaseUrl = '{app_root}'; </script> '''.format(app_root=app_root) favicon_path = '{}/images/favicon.png'.format(app_root) return ''' <!DOCTYPE html> <html> <head> {webroot_html} {metas} <title>D-Tale Charts</title> <link rel="shortcut icon" href="{favicon_path}"> {css} </head> <body> {github_fork_html} <div class="container-fluid charts"> <div class="row" style="margin: 0"> <div class="col-auto"> <header> <span class="title-font">D-TALE</span> <span style="font-size: 16px" class="pl-4">Charts</span> </header> </div> <div class="col"></div> <div class="col-auto mt-4" style="{back_to_data_padding}"> <a href="#" onclick="javascript:backToData()"> <i class="fas fa-th mr-4"></i> <span>Back To Data</span> </a> </div> </div> {app_entry} </div> <footer> {config} {scripts} <script type="text/javascript"> const pathSegs = window.location.pathname.split('/'); const dataId = pathSegs[pathSegs.length - 1]; const backToData = () => window.open('{app_root}/dtale/main/' + dataId); const goToLegacy = () => location.replace('{app_root}/dtale/popup/charts/' + dataId); </script> {renderer} {css} </footer> </body> </html> '''.format(metas=kwargs['metas'], css=kwargs['css'], app_entry=kwargs['app_entry'], config=kwargs['config'], scripts=kwargs['scripts'], renderer=kwargs['renderer'], back_to_data_padding=back_to_data_padding, webroot_html=webroot_html, github_fork_html=github_fork_html, app_root=app_root if is_app_root_defined(app_root) else '', favicon_path=favicon_path)