Skip to content

Commit 940643b

Browse files
committed
fixed
1 parent 96e6d54 commit 940643b

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-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"Invalid field type: {data['type']}. {e}") from e
348+
343349
super().__init__(**data)
344350

345351
def __str__(self) -> str:

tests/test_types.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,16 @@ 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() -> None:
235+
field_var = NestedField(
236+
1,
237+
"optional_field1",
238+
"string",
239+
required=True,
240+
)
241+
assert isinstance(field_var.field_type, StringType)
242+
243+
234244
@pytest.mark.parametrize("input_index,input_type", non_parameterized_types)
235245
@pytest.mark.parametrize("check_index,check_type", non_parameterized_types)
236246
def test_non_parameterized_type_equality(

0 commit comments

Comments
 (0)