mirror of
https://github.com/apache/superset.git
synced 2026-04-17 07:05:04 +00:00
fix: Ensure table uniqueness on update (#15909)
* fix: Ensure table uniqueness on update * Update models.py * Update slice.py * Update datasource_tests.py Co-authored-by: John Bodley <john.bodley@airbnb.com>
This commit is contained in:
@@ -99,10 +99,6 @@ def post_assert_metric(
|
||||
return rv
|
||||
|
||||
|
||||
def get_table_by_name(name: str) -> SqlaTable:
|
||||
return db.session.query(SqlaTable).filter_by(table_name=name).one()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def logged_in_admin():
|
||||
"""Fixture with app context and logged in admin user."""
|
||||
@@ -132,12 +128,7 @@ class SupersetTestCase(TestCase):
|
||||
|
||||
@staticmethod
|
||||
def get_birth_names_dataset() -> SqlaTable:
|
||||
example_db = get_example_database()
|
||||
return (
|
||||
db.session.query(SqlaTable)
|
||||
.filter_by(database=example_db, table_name="birth_names")
|
||||
.one()
|
||||
)
|
||||
return SupersetTestCase.get_table(name="birth_names")
|
||||
|
||||
@staticmethod
|
||||
def create_user_with_roles(
|
||||
@@ -254,13 +245,31 @@ class SupersetTestCase(TestCase):
|
||||
return slc
|
||||
|
||||
@staticmethod
|
||||
def get_table_by_name(name: str) -> SqlaTable:
|
||||
return get_table_by_name(name)
|
||||
def get_table(
|
||||
name: str, database_id: Optional[int] = None, schema: Optional[str] = None
|
||||
) -> SqlaTable:
|
||||
return (
|
||||
db.session.query(SqlaTable)
|
||||
.filter_by(
|
||||
database_id=database_id
|
||||
or SupersetTestCase.get_database_by_name("examples").id,
|
||||
schema=schema,
|
||||
table_name=name,
|
||||
)
|
||||
.one()
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def get_database_by_id(db_id: int) -> Database:
|
||||
return db.session.query(Database).filter_by(id=db_id).one()
|
||||
|
||||
@staticmethod
|
||||
def get_database_by_name(database_name: str = "main") -> Database:
|
||||
if database_name == "examples":
|
||||
return get_example_database()
|
||||
else:
|
||||
raise ValueError("Database doesn't exist")
|
||||
|
||||
@staticmethod
|
||||
def get_druid_ds_by_name(name: str) -> DruidDatasource:
|
||||
return db.session.query(DruidDatasource).filter_by(datasource_name=name).first()
|
||||
@@ -340,12 +349,6 @@ class SupersetTestCase(TestCase):
|
||||
):
|
||||
security_manager.del_permission_role(public_role, perm)
|
||||
|
||||
def _get_database_by_name(self, database_name="main"):
|
||||
if database_name == "examples":
|
||||
return get_example_database()
|
||||
else:
|
||||
raise ValueError("Database doesn't exist")
|
||||
|
||||
def run_sql(
|
||||
self,
|
||||
sql,
|
||||
@@ -364,7 +367,7 @@ class SupersetTestCase(TestCase):
|
||||
if user_name:
|
||||
self.logout()
|
||||
self.login(username=(user_name or "admin"))
|
||||
dbid = self._get_database_by_name(database_name).id
|
||||
dbid = SupersetTestCase.get_database_by_name(database_name).id
|
||||
json_payload = {
|
||||
"database_id": dbid,
|
||||
"sql": sql,
|
||||
@@ -448,7 +451,7 @@ class SupersetTestCase(TestCase):
|
||||
if user_name:
|
||||
self.logout()
|
||||
self.login(username=(user_name if user_name else "admin"))
|
||||
dbid = self._get_database_by_name(database_name).id
|
||||
dbid = SupersetTestCase.get_database_by_name(database_name).id
|
||||
resp = self.get_json_resp(
|
||||
"/superset/validate_sql_json/",
|
||||
raise_on_error=False,
|
||||
|
||||
Reference in New Issue
Block a user