You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by el...@apache.org on 2022/04/07 00:32:23 UTC
[superset] branch master updated: fix: check type of url before performing string actions (#19569)
This is an automated email from the ASF dual-hosted git repository.
elizabeth pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new aa419b8119 fix: check type of url before performing string actions (#19569)
aa419b8119 is described below
commit aa419b811951a5d667fa721f295f7706bfad4680
Author: Elizabeth Thompson <es...@gmail.com>
AuthorDate: Wed Apr 6 17:32:10 2022 -0700
fix: check type of url before performing string actions (#19569)
* ensure url is a string
* return url if param is a url
---
superset/databases/utils.py | 18 +++++++++-----
tests/unit_tests/databases/utils_test.py | 40 ++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+), 6 deletions(-)
diff --git a/superset/databases/utils.py b/superset/databases/utils.py
index 5d22e5fe5c..9229bb8cba 100644
--- a/superset/databases/utils.py
+++ b/superset/databases/utils.py
@@ -14,7 +14,7 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-from typing import Any, Dict, List, Optional
+from typing import Any, Dict, List, Optional, Union
from sqlalchemy.engine.url import make_url, URL
@@ -104,7 +104,7 @@ def get_table_metadata(
}
-def make_url_safe(raw_url: str) -> URL:
+def make_url_safe(raw_url: Union[str, URL]) -> URL:
"""
Wrapper for SQLAlchemy's make_url(), which tends to raise too detailed of
errors, which inevitably find their way into server logs. ArgumentErrors
@@ -112,7 +112,13 @@ def make_url_safe(raw_url: str) -> URL:
:param raw_url:
:return:
"""
- try:
- return make_url(raw_url.strip()) # noqa
- except Exception:
- raise DatabaseInvalidError() # pylint: disable=raise-missing-from
+
+ if isinstance(raw_url, str):
+ url = raw_url.strip()
+ try:
+ return make_url(url) # noqa
+ except Exception:
+ raise DatabaseInvalidError() # pylint: disable=raise-missing-from
+
+ else:
+ return raw_url
diff --git a/tests/unit_tests/databases/utils_test.py b/tests/unit_tests/databases/utils_test.py
new file mode 100644
index 0000000000..8dbc11a3b7
--- /dev/null
+++ b/tests/unit_tests/databases/utils_test.py
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from sqlalchemy.engine.url import make_url
+from sqlalchemy.orm.session import Session
+
+from superset.databases.utils import make_url_safe
+
+
+def test_make_url_safe_string(app_context: None, session: Session) -> None:
+ """
+ Test converting a string to a safe uri
+ """
+ uri_string = "postgresql+psycopg2://superset:***@127.0.0.1:5432/superset"
+ uri_safe = make_url_safe(uri_string)
+ assert str(uri_safe) == uri_string
+ assert uri_safe == make_url(uri_string)
+
+
+def test_make_url_safe_url(app_context: None, session: Session) -> None:
+ """
+ Test converting a url to a safe uri
+ """
+ uri = make_url("postgresql+psycopg2://superset:***@127.0.0.1:5432/superset")
+ uri_safe = make_url_safe(uri)
+ assert uri_safe == uri