diff --git a/superset/explore/commands/get.py b/superset/explore/commands/get.py index 1c56e5540a23a..331f662767ca9 100644 --- a/superset/explore/commands/get.py +++ b/superset/explore/commands/get.py @@ -19,7 +19,7 @@ from typing import Any, cast, Dict, Optional import simplejson as json -from flask import current_app as app +from flask import current_app, request from flask_babel import gettext as __, lazy_gettext as _ from sqlalchemy.exc import SQLAlchemyError @@ -121,7 +121,7 @@ def run(self) -> Optional[Dict[str, Any]]: dataset_name = dataset.name if dataset else _("[Missing Dataset]") if dataset: - if app.config["ENABLE_ACCESS_REQUEST"] and ( + if current_app.config["ENABLE_ACCESS_REQUEST"] and ( not security_manager.can_access_datasource(dataset) ): message = __(security_manager.get_datasource_access_error_msg(dataset)) @@ -139,9 +139,10 @@ def run(self) -> Optional[Dict[str, Any]]: str(self._dataset_id) + "__" + cast(str, self._dataset_type) ) - # On explore, merge legacy and extra filters into the form data + # On explore, merge legacy/extra filters and URL params into the form data utils.convert_legacy_filters_into_adhoc(form_data) utils.merge_extra_filters(form_data) + utils.merge_request_params(form_data, request.args) dummy_dataset_data: Dict[str, Any] = { "type": self._dataset_type, diff --git a/tests/integration_tests/explore/api_tests.py b/tests/integration_tests/explore/api_tests.py index 8fb642286a3d5..dee7424a09645 100644 --- a/tests/integration_tests/explore/api_tests.py +++ b/tests/integration_tests/explore/api_tests.py @@ -226,3 +226,15 @@ def test_wrong_endpoint(mock_get_datasource, test_client, login_as_admin, datase data = json.loads(resp.data.decode("utf-8")) assert resp.status_code == 302 assert data["redirect"] == dataset.default_endpoint + + +def test_get_url_params(test_client, login_as_admin, chart_id): + resp = test_client.get(f"api/v1/explore/?slice_id={chart_id}&foo=bar") + assert resp.status_code == 200 + data = json.loads(resp.data.decode("utf-8")) + result = data.get("result") + + assert result["form_data"]["url_params"] == { + "foo": "bar", + "slice_id": str(chart_id), + }