Skip to content

Commit 88064c0

Browse files
committed
Add tests
1 parent b6ba319 commit 88064c0

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

pyiceberg/table/update/__init__.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -457,10 +457,13 @@ def _(update: SetSnapshotRefUpdate, base_metadata: TableMetadata, context: _Tabl
457457

458458
@_apply_table_update.register(RemoveSnapshotsUpdate)
459459
def _(update: RemoveSnapshotsUpdate, base_metadata: TableMetadata, context: _TableMetadataUpdateContext) -> TableMetadata:
460-
if not any(s.snapshot_id == update.snapshot_id for s in base_metadata.snapshots):
461-
raise ValueError(f"Snapshot with snapshot id {update.snapshot_id} does not exist")
460+
for remove_snapshot_id in update.snapshot_ids:
461+
if remove_snapshot_id == base_metadata.current_snapshot_id:
462+
raise ValueError(f"Can't remove current snapshot id {remove_snapshot_id}")
463+
if not any(s.snapshot_id == remove_snapshot_id for s in base_metadata.snapshots):
464+
raise ValueError(f"Snapshot with snapshot id {remove_snapshot_id} does not exist: {base_metadata.snapshots}")
462465

463-
snapshots = [s for s in base_metadata.snapshots if s.snapshot_id != update.snapshot_id]
466+
snapshots = [s for s in base_metadata.snapshots if s.snapshot_id not in update.snapshot_ids]
464467
context.add_update(update)
465468
return base_metadata.model_copy(update={"snapshots": snapshots})
466469

tests/table/test_init.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
AssertRefSnapshotId,
7979
AssertTableUUID,
8080
RemovePropertiesUpdate,
81+
RemoveSnapshotsUpdate,
8182
RemoveStatisticsUpdate,
8283
SetDefaultSortOrderUpdate,
8384
SetPropertiesUpdate,
@@ -793,6 +794,33 @@ def test_update_metadata_set_snapshot_ref(table_v2: Table) -> None:
793794
)
794795

795796

797+
def test_update_remove_snapshots(table_v2: Table) -> None:
798+
update = RemoveSnapshotsUpdate(
799+
snapshot_ids=[3051729675574597004],
800+
)
801+
new_metadata = update_table_metadata(table_v2.metadata, (update,))
802+
assert len(new_metadata.snapshots) == 1
803+
assert new_metadata.snapshots[0].snapshot_id == 3055729675574597004
804+
assert new_metadata.current_snapshot_id == 3055729675574597004
805+
assert new_metadata.last_updated_ms > table_v2.metadata.last_updated_ms
806+
807+
808+
def test_update_remove_snapshots_doesnt_exist(table_v2: Table) -> None:
809+
update = RemoveSnapshotsUpdate(
810+
snapshot_ids=[123],
811+
)
812+
with pytest.raises(ValueError, match="Snapshot with snapshot id 123 does not exist"):
813+
update_table_metadata(table_v2.metadata, (update,))
814+
815+
816+
def test_update_remove_snapshots_cant_remove_current_snapshot_id(table_v2: Table) -> None:
817+
update = RemoveSnapshotsUpdate(
818+
snapshot_ids=[3055729675574597004],
819+
)
820+
with pytest.raises(ValueError, match="Can't remove current snapshot id 3055729675574597004"):
821+
update_table_metadata(table_v2.metadata, (update,))
822+
823+
796824
def test_update_metadata_add_update_sort_order(table_v2: Table) -> None:
797825
new_sort_order = SortOrder(order_id=table_v2.sort_order().order_id + 1)
798826
new_metadata = update_table_metadata(

0 commit comments

Comments
 (0)