Skip to content

Commit acbd071

Browse files
authored
Write null when there is no parent-snapshot-id (#1383)
1 parent b4395ed commit acbd071

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

pyiceberg/manifest.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -957,7 +957,11 @@ def __init__(self, output_file: OutputFile, snapshot_id: int, parent_snapshot_id
957957
super().__init__(
958958
format_version=1,
959959
output_file=output_file,
960-
meta={"snapshot-id": str(snapshot_id), "parent-snapshot-id": str(parent_snapshot_id), "format-version": "1"},
960+
meta={
961+
"snapshot-id": str(snapshot_id),
962+
"parent-snapshot-id": str(parent_snapshot_id) if parent_snapshot_id is not None else "null",
963+
"format-version": "1",
964+
},
961965
)
962966

963967
def prepare_manifest(self, manifest_file: ManifestFile) -> ManifestFile:
@@ -976,7 +980,7 @@ def __init__(self, output_file: OutputFile, snapshot_id: int, parent_snapshot_id
976980
output_file=output_file,
977981
meta={
978982
"snapshot-id": str(snapshot_id),
979-
"parent-snapshot-id": str(parent_snapshot_id),
983+
"parent-snapshot-id": str(parent_snapshot_id) if parent_snapshot_id is not None else "null",
980984
"sequence-number": str(sequence_number),
981985
"format-version": "2",
982986
},

tests/utils/test_manifest.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
# under the License.
1717
# pylint: disable=redefined-outer-name,arguments-renamed,fixme
1818
from tempfile import TemporaryDirectory
19-
from typing import Dict
19+
from typing import Dict, Optional
2020
from unittest.mock import patch
2121

2222
import fastavro
@@ -526,14 +526,18 @@ def test_write_manifest(
526526

527527

528528
@pytest.mark.parametrize("format_version", [1, 2])
529+
@pytest.mark.parametrize("parent_snapshot_id", [19, None])
529530
def test_write_manifest_list(
530-
generated_manifest_file_file_v1: str, generated_manifest_file_file_v2: str, format_version: TableVersion
531+
generated_manifest_file_file_v1: str,
532+
generated_manifest_file_file_v2: str,
533+
format_version: TableVersion,
534+
parent_snapshot_id: Optional[int],
531535
) -> None:
532536
io = load_file_io()
533537

534538
snapshot = Snapshot(
535539
snapshot_id=25,
536-
parent_snapshot_id=19,
540+
parent_snapshot_id=parent_snapshot_id,
537541
timestamp_ms=1602638573590,
538542
manifest_list=generated_manifest_file_file_v1 if format_version == 1 else generated_manifest_file_file_v2,
539543
summary=Summary(Operation.APPEND),
@@ -545,12 +549,20 @@ def test_write_manifest_list(
545549
path = tmp_dir + "/manifest-list.avro"
546550
output = io.new_output(path)
547551
with write_manifest_list(
548-
format_version=format_version, output_file=output, snapshot_id=25, parent_snapshot_id=19, sequence_number=0
552+
format_version=format_version,
553+
output_file=output,
554+
snapshot_id=25,
555+
parent_snapshot_id=parent_snapshot_id,
556+
sequence_number=0,
549557
) as writer:
550558
writer.add_manifests(demo_manifest_list)
551559
new_manifest_list = list(read_manifest_list(io.new_input(path)))
552560

553-
expected_metadata = {"snapshot-id": "25", "parent-snapshot-id": "19", "format-version": str(format_version)}
561+
if parent_snapshot_id:
562+
expected_metadata = {"snapshot-id": "25", "parent-snapshot-id": "19", "format-version": str(format_version)}
563+
else:
564+
expected_metadata = {"snapshot-id": "25", "parent-snapshot-id": "null", "format-version": str(format_version)}
565+
554566
if format_version == 2:
555567
expected_metadata["sequence-number"] = "0"
556568
_verify_metadata_with_fastavro(path, expected_metadata)

0 commit comments

Comments
 (0)