From cd1f6d469b34c7c211c7b990ccfbde8909ecbea4 Mon Sep 17 00:00:00 2001 From: Elizabeth Thompson Date: Fri, 13 Jan 2023 14:50:18 -0800 Subject: [PATCH] fix: remove whitespace from http_path for databricks (#22671) --- superset/db_engine_specs/databricks.py | 5 +++++ .../db_engine_specs/test_databricks.py | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/superset/db_engine_specs/databricks.py b/superset/db_engine_specs/databricks.py index 131679359..98fc44e77 100644 --- a/superset/db_engine_specs/databricks.py +++ b/superset/db_engine_specs/databricks.py @@ -162,6 +162,7 @@ class DatabricksNativeEngineSpec(DatabricksODBCEngineSpec, BasicParametersMixin) def get_extra_params(database: "Database") -> Dict[str, Any]: """ Add a user agent to be used in the requests. + Trim whitespace from connect_args to avoid databricks driver errors """ extra: Dict[str, Any] = BaseEngineSpec.get_extra_params(database) engine_params: Dict[str, Any] = extra.setdefault("engine_params", {}) @@ -170,6 +171,10 @@ class DatabricksNativeEngineSpec(DatabricksODBCEngineSpec, BasicParametersMixin) connect_args.setdefault("http_headers", [("User-Agent", USER_AGENT)]) connect_args.setdefault("_user_agent_entry", USER_AGENT) + # trim whitespace from http_path to avoid databricks errors on connecting + if http_path := connect_args.get("http_path"): + connect_args["http_path"] = http_path.strip() + return extra @classmethod diff --git a/tests/unit_tests/db_engine_specs/test_databricks.py b/tests/unit_tests/db_engine_specs/test_databricks.py index 50c7fd47a..1962f4af3 100644 --- a/tests/unit_tests/db_engine_specs/test_databricks.py +++ b/tests/unit_tests/db_engine_specs/test_databricks.py @@ -175,3 +175,25 @@ def test_get_extra_params(mocker: MockerFixture) -> None: } } } + + # it should also remove whitespace from http_path + database.extra = json.dumps( + { + "engine_params": { + "connect_args": { + "http_headers": [("User-Agent", "Custom user agent")], + "_user_agent_entry": "Custom user agent", + "http_path": "/some_path_here_with_whitespace ", + } + } + } + ) + assert DatabricksNativeEngineSpec.get_extra_params(database) == { + "engine_params": { + "connect_args": { + "http_headers": [["User-Agent", "Custom user agent"]], + "_user_agent_entry": "Custom user agent", + "http_path": "/some_path_here_with_whitespace", + } + } + }