예제 #1
0
파일: views.py 프로젝트: standingtree/dtale
 def yaxis_min_max_values(
     yaxis_type, yaxis, inputs, yaxis_inputs, range_data, ext_aggs
 ):
     """
     dash callback controlling values for selected y-axis in y-axis range editor
     """
     y = make_list(inputs.get("y"))
     final_cols = build_final_cols(
         y,
         inputs.get("z"),
         inputs.get("agg"),
         ext_aggs if inputs.get("chart_type") not in NON_EXT_AGGREGATION else [],
     )
     dd_style = dict(
         display="block" if yaxis_type == "multi" and len(final_cols) > 1 else "none"
     )
     type_style = (
         {"borderRadius": "0 0.25rem 0.25rem 0"} if yaxis_type == "default" else None
     )
     min_max_style = (
         "none"
         if (yaxis_type == "default") or (yaxis_type == "multi" and yaxis is None)
         else "block"
     )
     label_style = dict(display=min_max_style)
     input_style = {"lineHeight": "inherit", "display": min_max_style}
     curr_min, curr_max = (None, None)
     range_min, range_max = ((range_data or {}).get(p) or {} for p in ["min", "max"])
     if yaxis:
         curr_vals = (yaxis_inputs or {}).get("data", {}).get(yaxis) or {}
         curr_min = curr_vals.get("min") or range_min.get(yaxis)
         curr_max = curr_vals.get("max") or range_max.get(yaxis)
     elif yaxis_type == "single":
         curr_vals = (yaxis_inputs or {}).get("data", {}).get("all") or {}
         curr_min = curr_vals.get("min")
         if curr_min is None:
             curr_min = get_default_range(range_min, final_cols)
         curr_max = curr_vals.get("max")
         if curr_max is None:
             curr_max = get_default_range(range_max, final_cols, max=True)
     return (
         curr_min,
         curr_max,
         dd_style,
         label_style,
         input_style,
         label_style,
         input_style,
         type_style,
     )
예제 #2
0
    def update_yaxis_data(
        yaxis_type,
        yaxis_min,
        yaxis_max,
        yaxis,
        yaxes,
        yaxis_data,
        range_data,
        inputs,
        ext_aggs,
    ):
        """
        dash callback controlling updates to y-axis range state
        """
        yaxis_data = yaxis_data or dict(data={})
        yaxis_data["type"] = yaxis_type
        yaxis = yaxis or yaxes[0]["value"] if len(yaxes) else None
        yaxis_name = "all" if yaxis_type == "single" else yaxis
        if yaxis_name == "all":
            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 [],
            )
            mins = range_data.get("min", {})
            maxs = range_data.get("max", {})
            range_min = get_default_range(mins, final_cols)
            range_max = get_default_range(maxs, final_cols, max=True)
        elif yaxis is None:
            raise PreventUpdate
        else:
            range_min, range_max = (range_data[p].get(yaxis_name)
                                    for p in ["min", "max"])

        if yaxis_name in yaxis_data["data"]:
            if (yaxis_min, yaxis_max) == (range_min, range_max):
                del yaxis_data["data"][yaxis_name]
            else:
                yaxis_data["data"][yaxis_name] = dict(min=yaxis_min,
                                                      max=yaxis_max)
        else:
            if (yaxis_min, yaxis_max) != (range_min, range_max):
                yaxis_data["data"][yaxis_name] = dict(min=yaxis_min,
                                                      max=yaxis_max)
        return yaxis_data
예제 #3
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,
     )