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