in pyiceberg/utils/schema_conversion.py [0:0]
def _convert_schema(self, avro_type: Union[str, Dict[str, Any]]) -> IcebergType:
"""
Resolve the Avro type.
Args:
avro_type: The Avro type, can be simple or complex.
Returns:
The equivalent IcebergType.
Raises:
ValueError: When there are unknown types
"""
if isinstance(avro_type, str) and avro_type in PRIMITIVE_FIELD_TYPE_MAPPING:
return PRIMITIVE_FIELD_TYPE_MAPPING[avro_type]
elif isinstance(avro_type, dict):
if "logicalType" in avro_type:
return self._convert_logical_type(avro_type)
else:
# Resolve potential nested types
while "type" in avro_type and isinstance(avro_type["type"], dict):
avro_type = avro_type["type"]
type_identifier = avro_type["type"]
if type_identifier == "record":
return self._convert_record_type(avro_type)
elif type_identifier == "array":
return self._convert_array_type(avro_type)
elif type_identifier == "map":
return self._convert_map_type(avro_type)
elif type_identifier == "fixed":
return self._convert_fixed_type(avro_type)
elif isinstance(type_identifier, str) and type_identifier in PRIMITIVE_FIELD_TYPE_MAPPING:
return PRIMITIVE_FIELD_TYPE_MAPPING[type_identifier]
else:
raise TypeError(f"Type not recognized: {avro_type}")
else:
raise TypeError(f"Type not recognized: {avro_type}")