in pyiceberg/types.py [0:0]
def handle_primitive_type(cls, v: Any, handler: ValidatorFunctionWrapHandler) -> IcebergType:
# Pydantic works mostly around dicts, and there seems to be something
# by not serializing into a RootModel, might revisit this.
if isinstance(v, str):
if v == "boolean":
return BooleanType()
elif v == "string":
return StringType()
elif v == "int":
return IntegerType()
elif v == "long":
return LongType()
if v == "float":
return FloatType()
if v == "double":
return DoubleType()
if v == "timestamp":
return TimestampType()
if v == "timestamptz":
return TimestamptzType()
if v == "timestamp_ns":
return TimestampNanoType()
if v == "timestamptz_ns":
return TimestamptzNanoType()
if v == "date":
return DateType()
if v == "time":
return TimeType()
if v == "uuid":
return UUIDType()
if v == "binary":
return BinaryType()
if v == "unknown":
return UnknownType()
if v.startswith("fixed"):
return FixedType(_parse_fixed_type(v))
if v.startswith("decimal"):
precision, scale = _parse_decimal_type(v)
return DecimalType(precision, scale)
else:
raise ValueError(f"Type not recognized: {v}")
if isinstance(v, dict) and cls == IcebergType:
complex_type = v.get("type")
if complex_type == "list":
return ListType(**v)
elif complex_type == "map":
return MapType(**v)
elif complex_type == "struct":
return StructType(**v)
else:
return NestedField(**v)
return handler(v)