Skip to content

Commit 87f2f2d

Browse files
committed
fixed
1 parent 96e6d54 commit 87f2f2d

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

pyiceberg/types.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ def __init__(
324324
self,
325325
field_id: Optional[int] = None,
326326
name: Optional[str] = None,
327-
field_type: Optional[IcebergType] = None,
327+
field_type: Optional[IcebergType | str] = None,
328328
required: bool = False,
329329
doc: Optional[str] = None,
330330
initial_default: Optional[Any] = None,
@@ -340,6 +340,12 @@ def __init__(
340340
data["doc"] = doc
341341
data["initial-default"] = data["initial-default"] if "initial-default" in data else initial_default
342342
data["write-default"] = data["write-default"] if "write-default" in data else write_default
343+
if isinstance(data["type"], str):
344+
try:
345+
data["type"] = IcebergType.handle_primitive_type(data["type"], None)
346+
except ValueError as e:
347+
raise ValueError(f"Unsupported field type: {data['type']}.") from e
348+
343349
super().__init__(**data)
344350

345351
def __str__(self) -> str:

tests/test_types.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,22 @@ def test_nested_field() -> None:
231231
assert "validation errors for NestedField" in str(exc_info.value)
232232

233233

234+
def test_nested_field_type_as_str_unsupported() -> None:
235+
with pytest.raises(ValueError) as exc_info:
236+
_ = (NestedField(1, "field", "list", required=True),)
237+
assert "Unsupported field type: list" in str(exc_info.value)
238+
239+
240+
def test_nested_field_type_as_str_struct() -> None:
241+
field_var = NestedField(
242+
1,
243+
"field",
244+
"string",
245+
required=True,
246+
)
247+
assert isinstance(field_var.field_type, StringType)
248+
249+
234250
@pytest.mark.parametrize("input_index,input_type", non_parameterized_types)
235251
@pytest.mark.parametrize("check_index,check_type", non_parameterized_types)
236252
def test_non_parameterized_type_equality(

0 commit comments

Comments
 (0)