diff --git a/superset/views/core.py b/superset/views/core.py index 30eb6fe27..b113db8e3 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -1376,7 +1376,7 @@ class Superset(BaseSupersetView): except CertificateException as ex: logger.info(ex.message) return json_error_response(ex.message) - except NoSuchModuleError as ex: + except (NoSuchModuleError, ModuleNotFoundError) as ex: logger.info("Invalid driver %s", ex) driver_name = make_url(uri).drivername return json_error_response( diff --git a/tests/core_tests.py b/tests/core_tests.py index b3d8cad9a..3bd9e0df4 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -439,6 +439,25 @@ class CoreTests(SupersetTestCase): expected_body, ) + data = json.dumps( + { + "uri": "mssql+pymssql://url", + "name": "examples", + "impersonate_user": False, + } + ) + response = self.client.post( + "/superset/testconn", data=data, content_type="application/json" + ) + assert response.status_code == 400 + assert response.headers["Content-Type"] == "application/json" + response_body = json.loads(response.data.decode("utf-8")) + expected_body = {"error": "Could not load database driver: mssql+pymssql"} + assert response_body == expected_body, "%s != %s" % ( + response_body, + expected_body, + ) + def test_testconn_unsafe_uri(self, username="admin"): self.login(username=username) app.config["PREVENT_UNSAFE_DB_CONNECTIONS"] = True