mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
refactor(native-filters): update dataMask and ExtraFormData schema (#13983)
* refactor: updates usage of `ownFilters` to `ownState` * refactor: update dataMask (final) * lint: fix lint * refactor: revert feat * fix: fix missed chart configuration * add filter set migration * apply new changes * fix migration revision * update migration * fix jest mock * js lint * fix test types * update tests and types * remove append_form_data from tests * fix findExistingFilterSet tests * add migration test Co-authored-by: Ville Brofeldt <ville.v.brofeldt@gmail.com>
This commit is contained in:
@@ -86,6 +86,11 @@ from sqlalchemy.types import TEXT, TypeDecorator, TypeEngine
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
import _thread # pylint: disable=C0411
|
||||
from superset.constants import (
|
||||
EXTRA_FORM_DATA_APPEND_KEYS,
|
||||
EXTRA_FORM_DATA_OVERRIDE_EXTRA_KEYS,
|
||||
EXTRA_FORM_DATA_OVERRIDE_REGULAR_MAPPINGS,
|
||||
)
|
||||
from superset.errors import ErrorLevel, SupersetErrorType
|
||||
from superset.exceptions import (
|
||||
CertificateException,
|
||||
@@ -1061,39 +1066,36 @@ def merge_extra_form_data(form_data: Dict[str, Any]) -> None:
|
||||
Merge extra form data (appends and overrides) into the main payload
|
||||
and add applied time extras to the payload.
|
||||
"""
|
||||
time_extras = {
|
||||
"granularity": "__granularity",
|
||||
"granularity_sqla": "__granularity",
|
||||
"time_range": "__time_range",
|
||||
}
|
||||
allowed_extra_overrides: Dict[str, Optional[str]] = {
|
||||
"time_grain_sqla": "__time_grain",
|
||||
"druid_time_origin": "__time_origin",
|
||||
"time_range_endpoints": None,
|
||||
}
|
||||
|
||||
applied_time_extras = form_data.get("applied_time_extras", {})
|
||||
form_data["applied_time_extras"] = applied_time_extras
|
||||
filter_keys = ["filters", "adhoc_filters"]
|
||||
extra_form_data = form_data.pop("extra_form_data", {})
|
||||
append_form_data = extra_form_data.pop("append_form_data", {})
|
||||
append_filters = append_form_data.get("filters", None)
|
||||
override_form_data = extra_form_data.pop("override_form_data", {})
|
||||
for key, value in override_form_data.items():
|
||||
form_data[key] = value
|
||||
# mark as temporal overrides as applied time extras
|
||||
time_extra = time_extras.get(key)
|
||||
if time_extra:
|
||||
applied_time_extras[time_extra] = value
|
||||
append_filters = extra_form_data.get("filters", None)
|
||||
|
||||
# merge append extras
|
||||
for key in [key for key in EXTRA_FORM_DATA_APPEND_KEYS if key not in filter_keys]:
|
||||
extra_value = getattr(extra_form_data, key, {})
|
||||
form_value = getattr(form_data, key, {})
|
||||
form_value.update(extra_value)
|
||||
if form_value:
|
||||
form_data["key"] = extra_value
|
||||
|
||||
# map regular extras that apply to form data properties
|
||||
for src_key, target_key in EXTRA_FORM_DATA_OVERRIDE_REGULAR_MAPPINGS.items():
|
||||
value = extra_form_data.get(src_key)
|
||||
if value is not None:
|
||||
form_data[target_key] = value
|
||||
|
||||
# map extras that apply to form data extra properties
|
||||
extras = form_data.get("extras", {})
|
||||
for key, value in allowed_extra_overrides.items():
|
||||
for key in EXTRA_FORM_DATA_OVERRIDE_EXTRA_KEYS:
|
||||
value = extra_form_data.get(key)
|
||||
extra = extras.get(key)
|
||||
if value and extra:
|
||||
applied_time_extras[value] = extra
|
||||
extras[key] = value
|
||||
form_data.update(extras)
|
||||
|
||||
adhoc_filters = form_data.get("adhoc_filters", [])
|
||||
form_data["adhoc_filters"] = adhoc_filters
|
||||
append_adhoc_filters = append_form_data.get("adhoc_filters", [])
|
||||
append_adhoc_filters = extra_form_data.get("adhoc_filters", [])
|
||||
adhoc_filters.extend({"isExtra": True, **fltr} for fltr in append_adhoc_filters)
|
||||
if append_filters:
|
||||
adhoc_filters.extend(
|
||||
|
||||
Reference in New Issue
Block a user