diff --git a/superset/utils.py b/superset/utils.py index c60f128d0e6..639045970d7 100644 --- a/superset/utils.py +++ b/superset/utils.py @@ -835,6 +835,13 @@ def merge_extra_filters(form_data): del form_data['extra_filters'] +def merge_request_params(form_data, params): + for key, value in params.items(): + if key == 'form_data': + continue + form_data[key] = value + + def get_update_perms_flag(): val = os.environ.get('SUPERSET_UPDATE_PERMS') return val.lower() not in ('0', 'false', 'no') if val else True diff --git a/superset/views/core.py b/superset/views/core.py index 9e0aa358b57..4330e7d7eea 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -43,7 +43,9 @@ from superset.legacy import cast_form_data import superset.models.core as models from superset.models.sql_lab import Query from superset.sql_parse import SupersetQuery -from superset.utils import has_access, merge_extra_filters, QueryStatus +from superset.utils import ( + has_access, merge_extra_filters, merge_request_params, QueryStatus, +) from .base import ( api, BaseSupersetView, CsvResponse, DeleteMixin, generate_download_headers, get_error_msg, get_user_roles, @@ -1257,11 +1259,7 @@ class Superset(BaseSupersetView): # merge request url params if request.method == 'GET': - url_params = request.args - for key, value in url_params.items(): - if key == 'form_data': - continue - form_data[key] = value + merge_request_params(form_data, request.args) # handle save or overwrite action = request.args.get('action') diff --git a/tests/utils_tests.py b/tests/utils_tests.py index 172818964f6..000079491a5 100644 --- a/tests/utils_tests.py +++ b/tests/utils_tests.py @@ -14,7 +14,8 @@ import numpy from superset.utils import ( base_json_conv, datetime_f, json_int_dttm_ser, json_iso_dttm_ser, - JSONEncodedDict, memoized, merge_extra_filters, parse_human_timedelta, + JSONEncodedDict, memoized, merge_extra_filters, merge_request_params, + parse_human_timedelta, SupersetException, validate_json, zlib_compress, zlib_decompress_to_string, ) @@ -216,6 +217,19 @@ class UtilsTestCase(unittest.TestCase): merge_extra_filters(form_data) self.assertEquals(form_data, expected) + def test_merge_request_params(self): + form_data = { + 'since': '2000', + 'until': 'now', + } + url_params = { + 'form_data': form_data, + 'dashboard_ids': '(1,2,3,4,5)', + } + merge_request_params(form_data, url_params) + self.assertIn('dashboard_ids', form_data.keys()) + self.assertNotIn('form_data', form_data.keys()) + def test_datetime_f(self): self.assertEquals( datetime_f(datetime(1990, 9, 21, 19, 11, 19, 626096)),