mirror of https://github.com/apache/superset.git
365 lines
13 KiB
Python
365 lines
13 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 copy import deepcopy
|
||
|
|
||
|
from superset.migrations.versions.fc3a3a8ff221_migrate_filter_sets_to_new_format import (
|
||
|
downgrade_filter_set,
|
||
|
upgrade_filter_set,
|
||
|
upgrade_select_filters,
|
||
|
)
|
||
|
|
||
|
native_filters_v1 = [
|
||
|
{
|
||
|
"cascadeParentIds": [],
|
||
|
"controlValues": {
|
||
|
"enableEmptyFilter": False,
|
||
|
"inverseSelection": False,
|
||
|
"multiSelect": True,
|
||
|
"sortAscending": True,
|
||
|
},
|
||
|
"defaultValue": None,
|
||
|
"filterType": "filter_select",
|
||
|
"id": "NATIVE_FILTER-CZpnK0rM-",
|
||
|
"isInstant": True,
|
||
|
"name": "Region",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{"column": {"name": "region"}, "datasetId": 2}],
|
||
|
},
|
||
|
{
|
||
|
"cascadeParentIds": [],
|
||
|
"defaultValue": "No filter",
|
||
|
"filterType": "filter_time",
|
||
|
"id": "NATIVE_FILTER-gCMse9C7e",
|
||
|
"isInstant": True,
|
||
|
"name": "Time Range",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{}],
|
||
|
},
|
||
|
{
|
||
|
"cascadeParentIds": ["NATIVE_FILTER-CZpnK0rM-"],
|
||
|
"controlValues": {
|
||
|
"defaultToFirstItem": False,
|
||
|
"enableEmptyFilter": False,
|
||
|
"inverseSelection": False,
|
||
|
"multiSelect": True,
|
||
|
"sortAscending": True,
|
||
|
},
|
||
|
"defaultValue": None,
|
||
|
"filterType": "filter_select",
|
||
|
"id": "NATIVE_FILTER-oQRgQ25Au",
|
||
|
"isInstant": True,
|
||
|
"name": "Country",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{"column": {"name": "country_name"}, "datasetId": 2}],
|
||
|
},
|
||
|
]
|
||
|
native_filters_v2 = [
|
||
|
{
|
||
|
"cascadeParentIds": [],
|
||
|
"controlValues": {
|
||
|
"defaultToFirstItem": False,
|
||
|
"enableEmptyFilter": False,
|
||
|
"inverseSelection": False,
|
||
|
"multiSelect": True,
|
||
|
"sortAscending": True,
|
||
|
},
|
||
|
"defaultValue": None,
|
||
|
"filterType": "filter_select",
|
||
|
"id": "NATIVE_FILTER-CZpnK0rM-",
|
||
|
"isInstant": True,
|
||
|
"name": "Region",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{"column": {"name": "region"}, "datasetId": 2}],
|
||
|
},
|
||
|
{
|
||
|
"cascadeParentIds": [],
|
||
|
"defaultValue": "No filter",
|
||
|
"filterType": "filter_time",
|
||
|
"id": "NATIVE_FILTER-gCMse9C7e",
|
||
|
"isInstant": True,
|
||
|
"name": "Time Range",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{}],
|
||
|
},
|
||
|
{
|
||
|
"cascadeParentIds": ["NATIVE_FILTER-CZpnK0rM-"],
|
||
|
"controlValues": {
|
||
|
"defaultToFirstItem": False,
|
||
|
"enableEmptyFilter": False,
|
||
|
"inverseSelection": False,
|
||
|
"multiSelect": True,
|
||
|
"sortAscending": True,
|
||
|
},
|
||
|
"defaultValue": None,
|
||
|
"filterType": "filter_select",
|
||
|
"id": "NATIVE_FILTER-oQRgQ25Au",
|
||
|
"isInstant": True,
|
||
|
"name": "Country",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{"column": {"name": "country_name"}, "datasetId": 2}],
|
||
|
},
|
||
|
]
|
||
|
|
||
|
filter_sets_v1 = {
|
||
|
"name": "New filter set",
|
||
|
"id": "FILTERS_SET-tt_Ovwy95",
|
||
|
"nativeFilters": {
|
||
|
"NATIVE_FILTER-tx05Ze2Hm": {
|
||
|
"id": "NATIVE_FILTER-tx05Ze2Hm",
|
||
|
"name": "Time range",
|
||
|
"filterType": "filter_time",
|
||
|
"targets": [{}],
|
||
|
"defaultValue": "No filter",
|
||
|
"cascadeParentIds": [],
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"isInstant": False,
|
||
|
},
|
||
|
"NATIVE_FILTER-JeZ9HYoTP": {
|
||
|
"cascadeParentIds": [],
|
||
|
"controlValues": {
|
||
|
"enableEmptyFilter": False,
|
||
|
"inverseSelection": False,
|
||
|
"multiSelect": True,
|
||
|
"sortAscending": True,
|
||
|
},
|
||
|
"defaultValue": None,
|
||
|
"filterType": "filter_select",
|
||
|
"id": "NATIVE_FILTER-JeZ9HYoTP",
|
||
|
"isInstant": False,
|
||
|
"name": "Platform",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{"column": {"name": "platform"}, "datasetId": 33}],
|
||
|
},
|
||
|
"NATIVE_FILTER-B2PFYVIUw": {
|
||
|
"cascadeParentIds": [],
|
||
|
"controlValues": {
|
||
|
"enableEmptyFilter": False,
|
||
|
"inverseSelection": False,
|
||
|
"multiSelect": True,
|
||
|
"sortAscending": True,
|
||
|
},
|
||
|
"defaultValue": None,
|
||
|
"filterType": "filter_select",
|
||
|
"id": "NATIVE_FILTER-B2PFYVIUw",
|
||
|
"isInstant": False,
|
||
|
"name": "Genre",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{"column": {"name": "genre"}, "datasetId": 33}],
|
||
|
},
|
||
|
"NATIVE_FILTER-VDLd4Wq-v": {
|
||
|
"cascadeParentIds": [],
|
||
|
"controlValues": {
|
||
|
"enableEmptyFilter": False,
|
||
|
"inverseSelection": False,
|
||
|
"multiSelect": True,
|
||
|
"sortAscending": True,
|
||
|
},
|
||
|
"defaultValue": None,
|
||
|
"filterType": "filter_select",
|
||
|
"id": "NATIVE_FILTER-VDLd4Wq-v",
|
||
|
"isInstant": False,
|
||
|
"name": "Publisher",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{"column": {"name": "publisher"}, "datasetId": 33}],
|
||
|
},
|
||
|
},
|
||
|
"dataMask": {
|
||
|
"nativeFilters": {
|
||
|
"NATIVE_FILTER-tx05Ze2Hm": {
|
||
|
"extraFormData": {"override_form_data": {"time_range": "No filter"}},
|
||
|
"currentState": {"value": "No filter"},
|
||
|
"id": "NATIVE_FILTER-tx05Ze2Hm",
|
||
|
},
|
||
|
"NATIVE_FILTER-B2PFYVIUw": {
|
||
|
"extraFormData": {
|
||
|
"append_form_data": {
|
||
|
"filters": [
|
||
|
{
|
||
|
"col": "genre",
|
||
|
"op": "IN",
|
||
|
"val": ["Adventure", "Fighting", "Misc"],
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
},
|
||
|
"currentState": {"value": ["Adventure", "Fighting", "Misc"]},
|
||
|
"id": "NATIVE_FILTER-B2PFYVIUw",
|
||
|
},
|
||
|
"NATIVE_FILTER-VDLd4Wq-v": {
|
||
|
"extraFormData": {"append_form_data": {"filters": []}},
|
||
|
"currentState": {"value": None},
|
||
|
"id": "NATIVE_FILTER-VDLd4Wq-v",
|
||
|
},
|
||
|
"NATIVE_FILTER-JeZ9HYoTP": {
|
||
|
"extraFormData": {
|
||
|
"append_form_data": {
|
||
|
"filters": [
|
||
|
{
|
||
|
"col": "platform",
|
||
|
"op": "IN",
|
||
|
"val": ["GB", "GBA", "PSV", "DS", "3DS"],
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
},
|
||
|
"currentState": {"value": ["GB", "GBA", "PSV", "DS", "3DS"]},
|
||
|
"id": "NATIVE_FILTER-JeZ9HYoTP",
|
||
|
},
|
||
|
}
|
||
|
},
|
||
|
}
|
||
|
|
||
|
filter_sets_v2 = {
|
||
|
"name": "New filter set",
|
||
|
"id": "FILTERS_SET-tt_Ovwy95",
|
||
|
"nativeFilters": {
|
||
|
"NATIVE_FILTER-tx05Ze2Hm": {
|
||
|
"id": "NATIVE_FILTER-tx05Ze2Hm",
|
||
|
"name": "Time range",
|
||
|
"filterType": "filter_time",
|
||
|
"targets": [{}],
|
||
|
"defaultValue": "No filter",
|
||
|
"cascadeParentIds": [],
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"isInstant": False,
|
||
|
},
|
||
|
"NATIVE_FILTER-JeZ9HYoTP": {
|
||
|
"cascadeParentIds": [],
|
||
|
"controlValues": {
|
||
|
"enableEmptyFilter": False,
|
||
|
"inverseSelection": False,
|
||
|
"multiSelect": True,
|
||
|
"sortAscending": True,
|
||
|
"defaultToFirstItem": False,
|
||
|
},
|
||
|
"defaultValue": None,
|
||
|
"filterType": "filter_select",
|
||
|
"id": "NATIVE_FILTER-JeZ9HYoTP",
|
||
|
"isInstant": False,
|
||
|
"name": "Platform",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{"column": {"name": "platform"}, "datasetId": 33}],
|
||
|
},
|
||
|
"NATIVE_FILTER-B2PFYVIUw": {
|
||
|
"cascadeParentIds": [],
|
||
|
"controlValues": {
|
||
|
"enableEmptyFilter": False,
|
||
|
"inverseSelection": False,
|
||
|
"multiSelect": True,
|
||
|
"sortAscending": True,
|
||
|
"defaultToFirstItem": False,
|
||
|
},
|
||
|
"defaultValue": None,
|
||
|
"filterType": "filter_select",
|
||
|
"id": "NATIVE_FILTER-B2PFYVIUw",
|
||
|
"isInstant": False,
|
||
|
"name": "Genre",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{"column": {"name": "genre"}, "datasetId": 33}],
|
||
|
},
|
||
|
"NATIVE_FILTER-VDLd4Wq-v": {
|
||
|
"cascadeParentIds": [],
|
||
|
"controlValues": {
|
||
|
"enableEmptyFilter": False,
|
||
|
"inverseSelection": False,
|
||
|
"multiSelect": True,
|
||
|
"sortAscending": True,
|
||
|
"defaultToFirstItem": False,
|
||
|
},
|
||
|
"defaultValue": None,
|
||
|
"filterType": "filter_select",
|
||
|
"id": "NATIVE_FILTER-VDLd4Wq-v",
|
||
|
"isInstant": False,
|
||
|
"name": "Publisher",
|
||
|
"scope": {"excluded": [], "rootPath": ["ROOT_ID"]},
|
||
|
"targets": [{"column": {"name": "publisher"}, "datasetId": 33}],
|
||
|
},
|
||
|
},
|
||
|
"dataMask": {
|
||
|
"NATIVE_FILTER-tx05Ze2Hm": {
|
||
|
"id": "NATIVE_FILTER-tx05Ze2Hm",
|
||
|
"filterState": {"value": "No filter"},
|
||
|
"extraFormData": {"time_range": "No filter"},
|
||
|
},
|
||
|
"NATIVE_FILTER-B2PFYVIUw": {
|
||
|
"id": "NATIVE_FILTER-B2PFYVIUw",
|
||
|
"filterState": {"value": ["Adventure", "Fighting", "Misc"]},
|
||
|
"extraFormData": {
|
||
|
"filters": [
|
||
|
{
|
||
|
"col": "genre",
|
||
|
"op": "IN",
|
||
|
"val": ["Adventure", "Fighting", "Misc"],
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
},
|
||
|
"NATIVE_FILTER-VDLd4Wq-v": {
|
||
|
"id": "NATIVE_FILTER-VDLd4Wq-v",
|
||
|
"filterState": {"value": None},
|
||
|
"extraFormData": {"filters": []},
|
||
|
},
|
||
|
"NATIVE_FILTER-JeZ9HYoTP": {
|
||
|
"id": "NATIVE_FILTER-JeZ9HYoTP",
|
||
|
"filterState": {"value": ["GB", "GBA", "PSV", "DS", "3DS"]},
|
||
|
"extraFormData": {
|
||
|
"filters": [
|
||
|
{
|
||
|
"col": "platform",
|
||
|
"op": "IN",
|
||
|
"val": ["GB", "GBA", "PSV", "DS", "3DS"],
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
|
||
|
def test_upgrade_select_filters():
|
||
|
"""
|
||
|
ensure that controlValue.defaultToFirstItem is added if it's missing
|
||
|
"""
|
||
|
converted_filters = deepcopy(native_filters_v1)
|
||
|
upgrade_select_filters(converted_filters)
|
||
|
assert converted_filters == native_filters_v2
|
||
|
|
||
|
|
||
|
def test_upgrade_filter_sets():
|
||
|
"""
|
||
|
ensure that filter set upgrade operation produces a object that is compatible
|
||
|
with a currently functioning set
|
||
|
"""
|
||
|
converted_filter_set = deepcopy(filter_sets_v1)
|
||
|
upgrade_filter_set(converted_filter_set)
|
||
|
assert converted_filter_set == filter_sets_v2
|
||
|
|
||
|
|
||
|
def test_downgrade_filter_set():
|
||
|
"""
|
||
|
ensure that the filter set downgrade operation produces an almost identical dict
|
||
|
as the original value
|
||
|
"""
|
||
|
converted_v1_set = deepcopy(filter_sets_v1)
|
||
|
# upgrade the native filter metadata in the comparison fixture,
|
||
|
# as removing the defaultToFirstItem is not necessary
|
||
|
upgrade_select_filters(converted_v1_set["nativeFilters"].values())
|
||
|
|
||
|
converted_filter_set = deepcopy(filter_sets_v2)
|
||
|
downgrade_filter_set(converted_filter_set)
|
||
|
assert converted_filter_set == converted_v1_set
|