Skip to content

Commit 7f1a538

Browse files
committed
fix: apply grants to the physical layer table on promote
1 parent 52e9f1a commit 7f1a538

2 files changed

Lines changed: 14 additions & 15 deletions

File tree

sqlmesh/core/snapshot/evaluator.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1830,6 +1830,9 @@ def promote(
18301830
view_properties=model.render_virtual_properties(**render_kwargs),
18311831
)
18321832

1833+
# Apply grants to the physical layer table
1834+
self._apply_grants(model, table_name, GrantsTargetLayer.PHYSICAL)
1835+
18331836
# Apply grants to the virtual layer view
18341837
self._apply_grants(model, view_name, GrantsTargetLayer.VIRTUAL)
18351838

tests/core/test_snapshot_evaluator.py

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5005,17 +5005,15 @@ def test_grants_create_model_kind(
50055005

50065006

50075007
@pytest.mark.parametrize(
5008-
"target_layer,apply_on_create,apply_on_promote",
5008+
"target_layer",
50095009
[
5010-
(GrantsTargetLayer.PHYSICAL, True, False),
5011-
(GrantsTargetLayer.VIRTUAL, False, True),
5012-
(GrantsTargetLayer.ALL, True, True),
5010+
GrantsTargetLayer.PHYSICAL,
5011+
GrantsTargetLayer.VIRTUAL,
5012+
GrantsTargetLayer.ALL,
50135013
],
50145014
)
50155015
def test_grants_target_layer(
50165016
target_layer: GrantsTargetLayer,
5017-
apply_on_create: bool,
5018-
apply_on_promote: bool,
50195017
adapter_mock: Mock,
50205018
mocker: MockerFixture,
50215019
make_snapshot: t.Callable[..., Snapshot],
@@ -5037,19 +5035,17 @@ def test_grants_target_layer(
50375035
snapshot.categorize_as(SnapshotChangeCategory.BREAKING)
50385036

50395037
evaluator.create([snapshot], {})
5040-
if apply_on_create:
5041-
sync_grants_mock.assert_called_once()
5042-
assert sync_grants_mock.call_args[0][1] == grants
5038+
if target_layer == GrantsTargetLayer.VIRTUAL:
5039+
assert sync_grants_mock.call_count == 0
50435040
else:
5044-
sync_grants_mock.assert_not_called()
5045-
5041+
assert sync_grants_mock.call_count == 1
5042+
assert sync_grants_mock.call_args[0][1] == grants
50465043
sync_grants_mock.reset_mock()
50475044
evaluator.promote([snapshot], EnvironmentNamingInfo(name="prod"))
5048-
if apply_on_promote:
5049-
sync_grants_mock.assert_called_once()
5050-
assert sync_grants_mock.call_args[0][1] == grants
5045+
if target_layer == GrantsTargetLayer.ALL:
5046+
assert sync_grants_mock.call_count == 2
50515047
else:
5052-
sync_grants_mock.assert_not_called()
5048+
assert sync_grants_mock.call_count == 1
50535049

50545050

50555051
def test_grants_update(

0 commit comments

Comments
 (0)