diff --git a/airflow/utils/helpers.py b/airflow/utils/helpers.py index 5bdbf0c14f8dd..a85ab8971cd1c 100644 --- a/airflow/utils/helpers.py +++ b/airflow/utils/helpers.py @@ -35,7 +35,6 @@ Tuple, TypeVar, ) -from urllib import parse from airflow.configuration import conf from airflow.exceptions import AirflowException @@ -258,8 +257,7 @@ def build_airflow_url_with_query(query: Dict[str, Any]) -> str: import flask view = conf.get('webserver', 'dag_default_view').lower() - url = flask.url_for(f"Airflow.{view}") - return f"{url}?{parse.urlencode(query)}" + return flask.url_for(f"Airflow.{view}", **query) # The 'template' argument is typed as Any because the jinja2.Template is too diff --git a/tests/utils/test_helpers.py b/tests/utils/test_helpers.py index c36f40887e2b3..72879fb8ee348 100644 --- a/tests/utils/test_helpers.py +++ b/tests/utils/test_helpers.py @@ -160,7 +160,7 @@ def test_build_airflow_url_with_query(self): Test query generated with dag_id and params """ query = {"dag_id": "test_dag", "param": "key/to.encode"} - expected_url = "/graph?dag_id=test_dag¶m=key%2Fto.encode" + expected_url = "/dags/test_dag/graph?param=key%2Fto.encode" from airflow.www.app import cached_app