Skip to content

Commit b0ea716

Browse files
Deserialize initial-default and write-default (#1432)
Ensures that these attributes are correctly applied to the NestedField when reading an Iceberg schema json file.
1 parent 54b08ee commit b0ea716

File tree

3 files changed

+37
-8
lines changed

3 files changed

+37
-8
lines changed

pyiceberg/types.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -328,8 +328,8 @@ def __init__(
328328
data["type"] = data["type"] if "type" in data else field_type
329329
data["required"] = required
330330
data["doc"] = doc
331-
data["initial-default"] = initial_default
332-
data["write-default"] = write_default
331+
data["initial-default"] = data["initial-default"] if "initial-default" in data else initial_default
332+
data["write-default"] = data["write-default"] if "write-default" in data else write_default
333333
super().__init__(**data)
334334

335335
def __str__(self) -> str:

tests/conftest.py

+29
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,35 @@ def table_schema_simple() -> Schema:
149149
)
150150

151151

152+
@pytest.fixture(scope="session")
153+
def table_schema_with_full_nested_fields() -> Schema:
154+
return schema.Schema(
155+
NestedField(
156+
field_id=1,
157+
name="foo",
158+
field_type=StringType(),
159+
required=False,
160+
doc="foo doc",
161+
initial_default="foo initial",
162+
write_default="foo write",
163+
),
164+
NestedField(
165+
field_id=2, name="bar", field_type=IntegerType(), required=True, doc="bar doc", initial_default=42, write_default=43
166+
),
167+
NestedField(
168+
field_id=3,
169+
name="baz",
170+
field_type=BooleanType(),
171+
required=False,
172+
doc="baz doc",
173+
initial_default=True,
174+
write_default=False,
175+
),
176+
schema_id=1,
177+
identifier_field_ids=[2],
178+
)
179+
180+
152181
@pytest.fixture(scope="session")
153182
def table_schema_nested() -> Schema:
154183
return schema.Schema(

tests/test_schema.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -421,17 +421,17 @@ def __getitem__(self, pos: int) -> Any:
421421
assert inner_accessor.get(container) == "name"
422422

423423

424-
def test_serialize_schema(table_schema_simple: Schema) -> None:
425-
actual = table_schema_simple.model_dump_json()
426-
expected = """{"type":"struct","fields":[{"id":1,"name":"foo","type":"string","required":false},{"id":2,"name":"bar","type":"int","required":true},{"id":3,"name":"baz","type":"boolean","required":false}],"schema-id":1,"identifier-field-ids":[2]}"""
424+
def test_serialize_schema(table_schema_with_full_nested_fields: Schema) -> None:
425+
actual = table_schema_with_full_nested_fields.model_dump_json()
426+
expected = """{"type":"struct","fields":[{"id":1,"name":"foo","type":"string","required":false,"doc":"foo doc","initial-default":"foo initial","write-default":"foo write"},{"id":2,"name":"bar","type":"int","required":true,"doc":"bar doc","initial-default":42,"write-default":43},{"id":3,"name":"baz","type":"boolean","required":false,"doc":"baz doc","initial-default":true,"write-default":false}],"schema-id":1,"identifier-field-ids":[2]}"""
427427
assert actual == expected
428428

429429

430-
def test_deserialize_schema(table_schema_simple: Schema) -> None:
430+
def test_deserialize_schema(table_schema_with_full_nested_fields: Schema) -> None:
431431
actual = Schema.model_validate_json(
432-
"""{"type": "struct", "fields": [{"id": 1, "name": "foo", "type": "string", "required": false}, {"id": 2, "name": "bar", "type": "int", "required": true}, {"id": 3, "name": "baz", "type": "boolean", "required": false}], "schema-id": 1, "identifier-field-ids": [2]}"""
432+
"""{"type": "struct", "fields": [{"id": 1, "name": "foo", "type": "string", "required": false, "doc": "foo doc", "initial-default": "foo initial", "write-default": "foo write"}, {"id": 2, "name": "bar", "type": "int", "required": true, "doc": "bar doc", "initial-default": 42, "write-default": 43}, {"id": 3, "name": "baz", "type": "boolean", "required": false, "doc": "baz doc", "initial-default": true, "write-default": false}], "schema-id": 1, "identifier-field-ids": [2]}"""
433433
)
434-
expected = table_schema_simple
434+
expected = table_schema_with_full_nested_fields
435435
assert actual == expected
436436

437437

0 commit comments

Comments
 (0)