chore(database): Creating helper make_url_safe to wrap potential errors (#19526)

* Creating helper make_url_safe to wrap potential errors

* Fixing imports

* Fixing imports again

* Adding comment

* Linting

* Fixing test

* Fixing test again...

* Fixing import
This commit is contained in:
Craig Rueda
2022-04-05 11:17:30 -07:00
committed by GitHub
parent a59718b094
commit f64d654de3
18 changed files with 90 additions and 71 deletions

View File

@@ -16,14 +16,15 @@
# under the License.
from typing import Any, Dict, List, Optional
from superset import app
from superset.models.core import Database
from sqlalchemy.engine.url import make_url, URL
custom_password_store = app.config["SQLALCHEMY_CUSTOM_PASSWORD_STORE"]
from superset.databases.commands.exceptions import DatabaseInvalidError
def get_foreign_keys_metadata(
database: Database, table_name: str, schema_name: Optional[str]
database: Any,
table_name: str,
schema_name: Optional[str],
) -> List[Dict[str, Any]]:
foreign_keys = database.get_foreign_keys(table_name, schema_name)
for fk in foreign_keys:
@@ -33,7 +34,7 @@ def get_foreign_keys_metadata(
def get_indexes_metadata(
database: Database, table_name: str, schema_name: Optional[str]
database: Any, table_name: str, schema_name: Optional[str]
) -> List[Dict[str, Any]]:
indexes = database.get_indexes(table_name, schema_name)
for idx in indexes:
@@ -51,7 +52,7 @@ def get_col_type(col: Dict[Any, Any]) -> str:
def get_table_metadata(
database: Database, table_name: str, schema_name: Optional[str]
database: Any, table_name: str, schema_name: Optional[str]
) -> Dict[str, Any]:
"""
Get table metadata information, including type, pk, fks.
@@ -101,3 +102,17 @@ def get_table_metadata(
"indexes": keys,
"comment": table_comment,
}
def make_url_safe(raw_url: str) -> URL:
"""
Wrapper for SQLAlchemy's make_url(), which tends to raise too detailed of
errors, which inevitably find their way into server logs. ArgumentErrors
tend to contain usernames and passwords, which makes them non-log-friendly
:param raw_url:
:return:
"""
try:
return make_url(raw_url.strip())
except Exception:
raise DatabaseInvalidError() # pylint: disable=raise-missing-from