mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
fix: get or create db with an existing invalid URL (#23737)
This commit is contained in:
committed by
GitHub
parent
306fb22021
commit
f80e738196
@@ -47,7 +47,7 @@ from sqlalchemy import (
|
||||
from sqlalchemy.engine import Connection, Dialect, Engine
|
||||
from sqlalchemy.engine.reflection import Inspector
|
||||
from sqlalchemy.engine.url import URL
|
||||
from sqlalchemy.exc import ArgumentError, NoSuchModuleError
|
||||
from sqlalchemy.exc import NoSuchModuleError
|
||||
from sqlalchemy.ext.hybrid import hybrid_property
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.pool import NullPool
|
||||
@@ -56,6 +56,7 @@ from sqlalchemy.sql import expression, Select
|
||||
|
||||
from superset import app, db_engine_specs
|
||||
from superset.constants import LRU_CACHE_MAX_SIZE, PASSWORD_MASK
|
||||
from superset.databases.commands.exceptions import DatabaseInvalidError
|
||||
from superset.databases.utils import make_url_safe
|
||||
from superset.db_engine_specs.base import MetricType, TimeGrain
|
||||
from superset.extensions import (
|
||||
@@ -888,7 +889,7 @@ class Database(
|
||||
def sqlalchemy_uri_decrypted(self) -> str:
|
||||
try:
|
||||
conn = make_url_safe(self.sqlalchemy_uri)
|
||||
except (ArgumentError, ValueError):
|
||||
except DatabaseInvalidError:
|
||||
# if the URI is invalid, ignore and return a placeholder url
|
||||
# (so users see 500 less often)
|
||||
return "dialect://invalid_uri"
|
||||
|
||||
@@ -763,6 +763,13 @@ class TestUtils(SupersetTestCase):
|
||||
with self.assertRaises(DatabaseInvalidError):
|
||||
get_or_create_db("test_db", "yoursql:superset.db/()")
|
||||
|
||||
def test_get_or_create_db_existing_invalid_uri(self):
|
||||
database = get_or_create_db("test_db", "sqlite:///superset.db")
|
||||
database.sqlalchemy_uri = "None"
|
||||
db.session.commit()
|
||||
database = get_or_create_db("test_db", "sqlite:///superset.db")
|
||||
assert database.sqlalchemy_uri == "sqlite:///superset.db"
|
||||
|
||||
def test_get_iterable(self):
|
||||
self.assertListEqual(get_iterable(123), [123])
|
||||
self.assertListEqual(get_iterable([123]), [123])
|
||||
|
||||
Reference in New Issue
Block a user