Compare commits

...

2 Commits

Author SHA1 Message Date
Beto Dealmeida
72f4a52c97 WIP 2025-05-30 13:42:31 -04:00
Beto Dealmeida
c85229d9b4 WIP 2025-05-30 13:15:10 -04:00
2 changed files with 124 additions and 0 deletions

View File

@@ -18,6 +18,10 @@ from collections import defaultdict
from textwrap import dedent
from typing import Any
from flask import current_app
from superset import db
from superset.connectors.sqla.models import SqlaTable
from superset.models.dashboard import Dashboard
from superset.models.slice import Slice
from superset.utils import json
@@ -79,6 +83,11 @@ def convert_filter_scopes_to_native_filters( # pylint: disable=invalid-name,too
key = str(filter_box.id)
params = json.loads(filter_box.params or "{}")
parameter_configs = {
f"__parameter_{parameter_config['key']}": parameter_config
for parameter_config in params.get("parameter_configs", [])
}
for field, filter_scope in filter_scope_by_key_and_field[key].items():
default = default_filters.get(key, {}).get(field)
short_id = f"{shortid()}"[:9]
@@ -157,6 +166,111 @@ def convert_filter_scopes_to_native_filters( # pylint: disable=invalid-name,too
"extraFormData": {"time_range": default},
"filterState": {"value": default},
}
elif field == "__group_by" and params.get("group_by_filters"):
datasource = db.session.query(SqlaTable).get(filter_box.datasource_id)
datasource_columns = [
column.column_name for column in datasource.columns
]
fltr.update(
{
"filterType": "filter_groupby",
"name": f"{filter_box.datasource_name} group by",
"description": "",
"targets": [
{
"datasetId": filter_box.datasource_id,
"column": {"name": datasource_columns},
}
],
"controlValues": {
"enableEmptyFilter": False,
"multiSelect": True,
},
"defaultDataMask": {
"extraFormData": {},
"filterState": {},
"ownState": {},
},
}
)
elif field == "__exp_t_c" and params.get("exp_t_c_selectors"):
ab_test_col = (
current_app.config["TABLE_DEF"]
.get(filter_box.datasource_name, {})
.get("ab_test_column")
)
fltr.extend(
{
"filterType": filter_type,
"name": "Experiment Treatment",
"description": "",
"targets": [
{
"datasetId": filter_box.datasource_id,
"column": {"name": ab_test_col},
}
],
"adhoc_filters": params.get("adhoc_filters", []),
"time_range": params.get("time_range"),
"granularity_sqla": params.get("granularity_sqla"),
"controlValues": {"enableEmptyFilter": False},
"defaultDataMask": {
"extraFormData": {},
"filterState": {},
"ownState": {},
},
}
for filter_type in ["filter_exp_c_select", "filter_exp_t_select"]
)
elif field in parameter_configs:
parameter_config = parameter_configs[field]
default_values = [
value.strip()
for value in parameter_config["defaultValue"].split(";")
]
fltr.update(
{
"filterType": "filter_parameter",
"name": (
filter_box.datasource_name
+ " parameter "
+ parameter_config["parameter"]
),
"description": "",
"targets": [{"datasetId": filter_box.datasource_id}],
"defaultDataMask": {
"extraFormData": {
"filters": [
{
"col": (
"__parameter_"
+ parameter_config["dataType"]
+ "_"
+ parameter_config["parameter"]
),
"OP": "IN",
"val": default_values,
},
],
},
"filterState": {
"validateMessage": False,
"validateStatus": False,
"label": ", ".join(default_values),
"value": default_values,
},
},
"time_range": params.get("time_range"),
"granularity_sqla": params.get("granularity_sqla"),
"controlValues": {
"parameterDataType": parameter_config["dataType"],
"parameter": parameter_config["parameter"],
"enableEmptyFilter": parameter_config["clearable"],
"multiSelect": parameter_config["multiple"],
"searchAllOptions": parameter_config["searchAllOptions"],
},
},
)
else:
for config in params.get("filter_configs") or []:
if config["column"] == field:

View File

@@ -63,6 +63,16 @@ def convert_filter_scopes( # noqa: C901
add_filter_scope(filter_fields, "__time_col", filter_id)
if slice_params.get("show_sqla_time_granularity"):
add_filter_scope(filter_fields, "__time_grain", filter_id)
if slice_params.get("group_by_filters"):
add_filter_scope(filter_fields, "__group_by", filter_id)
if slice_params.get("exp_t_c_selectors"):
add_filter_scope(filter_fields, "__exp_t_c", filter_id)
for parameter_config in slice_params.get("parameter_configs", []):
add_filter_scope(
filter_fields,
f"__parameter_{parameter_config['key']}",
filter_id,
)
for config in configs:
add_filter_scope(filter_fields, config.get("column"), filter_id)