This is an automated email from the ASF dual-hosted git repository. beto pushed a commit to branch small-fixes-catalog-migration in repository https://gitbox.apache.org/repos/asf/superset.git
commit e2b35e8626245c3e42d0a831d49f43ff8566c6b4 Author: Beto Dealmeida <[email protected]> AuthorDate: Fri Jul 12 16:27:46 2024 -0400 fix: small fixes to the catalog migration --- superset/migrations/shared/catalogs.py | 9 +++++++-- tests/unit_tests/security/manager_test.py | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/superset/migrations/shared/catalogs.py b/superset/migrations/shared/catalogs.py index b4c8658cbe..27952371bd 100644 --- a/superset/migrations/shared/catalogs.py +++ b/superset/migrations/shared/catalogs.py @@ -102,7 +102,8 @@ WHERE ap.name = 'schema_access'; """ # [PostgreSQL].[postgres].[public] => public - return sorted({row[0].split(".")[-1][1:-1] for row in op.execute(query)}) + conn = op.get_bind() + return sorted({row[0].split(".")[-1][1:-1] for row in conn.execute(query)}) def upgrade_catalog_perms(engines: set[str] | None = None) -> None: @@ -267,8 +268,12 @@ def downgrade_schema_perms(database: Database, catalog: str, session: Session) - ) existing_pvm = session.query(ViewMenu).filter_by(name=perm).one_or_none() if existing_pvm: - existing_pvm.name = security_manager.get_schema_perm( + new_perm = security_manager.get_schema_perm( database.database_name, None, schema, ) + if pvm := session.query(ViewMenu).filter_by(name=new_perm).one_or_none(): + session.delete(pvm) + session.flush() + existing_pvm.name = new_perm diff --git a/tests/unit_tests/security/manager_test.py b/tests/unit_tests/security/manager_test.py index 2d3e7250be..a83e415529 100644 --- a/tests/unit_tests/security/manager_test.py +++ b/tests/unit_tests/security/manager_test.py @@ -726,7 +726,7 @@ def test_raise_for_access_catalog( mocker.patch.object( sm, "get_catalog_perm", - return_value="[PostgreSQL].[db1].[public]", + return_value="[PostgreSQL].[db1]", ) mocker.patch.object(sm, "is_guest_user", return_value=False) SqlaTable = mocker.patch("superset.connectors.sqla.models.SqlaTable") @@ -741,7 +741,7 @@ def test_raise_for_access_catalog( can_access = mocker.patch.object(sm, "can_access", return_value=True) sm.raise_for_access(query=query) - can_access.assert_called_with("catalog_access", "[PostgreSQL].[db1].[public]") + can_access.assert_called_with("catalog_access", "[PostgreSQL].[db1]") mocker.patch.object(sm, "can_access", return_value=False) with pytest.raises(SupersetSecurityException) as excinfo:
