Esempio n. 1
0
 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 [])),
     )
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
 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)
Esempio n. 5
0
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
Esempio n. 6
0
 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"),
     )
Esempio n. 7
0
 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,
     )
Esempio n. 8
0
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)