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:
simcha90
2021-04-15 17:43:29 +03:00
committed by GitHub
parent 68e11cd47f
commit 8ef572a412
78 changed files with 1536 additions and 958 deletions

View File

@@ -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(