Files
superset2/superset/migrations/shared/migrate_viz/processors.py
2023-09-22 09:44:40 -03:00

134 lines
4.6 KiB
Python

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from typing import Any
from .base import MigrateViz
class MigrateTreeMap(MigrateViz):
source_viz_type = "treemap"
target_viz_type = "treemap_v2"
remove_keys = {"metrics"}
rename_keys = {"order_desc": "sort_by_metric"}
def _pre_action(self) -> None:
if (
"metrics" in self.data
and isinstance(self.data["metrics"], list)
and len(self.data["metrics"]) > 0
):
self.data["metric"] = self.data["metrics"][0]
class MigrateAreaChart(MigrateViz):
"""
Migrate area charts.
This migration is incomplete, see https://github.com/apache/superset/pull/24703#discussion_r1265222611
for more details. If you fix this migration, please update the ``migrate_chart``
function in ``superset/charts/commands/importers/v1/utils.py`` so that it gets
applied in chart imports.
"""
source_viz_type = "area"
target_viz_type = "echarts_area"
remove_keys = {"contribution", "stacked_style", "x_axis_label"}
def _pre_action(self) -> None:
if self.data.get("contribution"):
self.data["contributionMode"] = "row"
if stacked := self.data.get("stacked_style"):
stacked_map = {
"expand": "Expand",
"stack": "Stack",
}
self.data["show_extra_controls"] = True
self.data["stack"] = stacked_map.get(stacked)
if x_axis := self.data.get("granularity_sqla"):
self.data["x_axis"] = x_axis
if x_axis_label := self.data.get("x_axis_label"):
self.data["x_axis_title"] = x_axis_label
self.data["x_axis_title_margin"] = 30
class MigratePivotTable(MigrateViz):
source_viz_type = "pivot_table"
target_viz_type = "pivot_table_v2"
remove_keys = {"pivot_margins"}
rename_keys = {
"columns": "groupbyColumns",
"combine_metric": "combineMetric",
"groupby": "groupbyRows",
"number_format": "valueFormat",
"pandas_aggfunc": "aggregateFunction",
"row_limit": "series_limit",
"timeseries_limit_metric": "series_limit_metric",
"transpose_pivot": "transposePivot",
}
aggregation_mapping = {
"sum": "Sum",
"mean": "Average",
"median": "Median",
"min": "Minimum",
"max": "Maximum",
"std": "Sample Standard Deviation",
"var": "Sample Variance",
}
def _pre_action(self) -> None:
if pivot_margins := self.data.get("pivot_margins"):
self.data["colTotals"] = pivot_margins
self.data["colSubTotals"] = pivot_margins
if pandas_aggfunc := self.data.get("pandas_aggfunc"):
self.data["pandas_aggfunc"] = self.aggregation_mapping[pandas_aggfunc]
self.data["rowOrder"] = "value_z_to_a"
class MigrateDualLine(MigrateViz):
has_x_axis_control = True
source_viz_type = "dual_line"
target_viz_type = "mixed_timeseries"
rename_keys = {
"x_axis_format": "x_axis_time_format",
"y_axis_2_format": "y_axis_format_secondary",
"y_axis_2_bounds": "y_axis_bounds_secondary",
}
remove_keys = {"metric", "metric_2"}
def _pre_action(self) -> None:
self.data["yAxisIndex"] = 0
self.data["yAxisIndexB"] = 1
self.data["adhoc_filters_b"] = self.data.get("adhoc_filters")
self.data["truncateYAxis"] = True
self.data["metrics"] = [self.data.get("metric")]
self.data["metrics_b"] = [self.data.get("metric_2")]
def _migrate_temporal_filter(self, rv_data: dict[str, Any]) -> None:
super()._migrate_temporal_filter(rv_data)
rv_data["adhoc_filters_b"] = rv_data.get("adhoc_filters") or []
class MigrateSunburst(MigrateViz):
source_viz_type = "sunburst"
target_viz_type = "sunburst_v2"
rename_keys = {"groupby": "columns"}