in bq-connector/docai_bq_connector/connector/BqDocumentMapper.py [0:0]
def _cast_type(self, field: DocumentField, bq_datatype):
try:
raw_value = (
field.value.strip() if isinstance(field.value, str) else field.value
)
if self.parsing_methodology in [
PARSING_METHOD_ENTITIES,
PARSING_METHOD_FORM,
]:
if field.value is None:
return None
if bq_datatype == "STRING":
return raw_value
if bq_datatype == "BOOLEAN":
return get_bool_value(raw_value)
if bq_datatype == "DATETIME":
if isinstance(field.value, datetime):
dt: datetime = field.value
return dt.isoformat()
return raw_value
if bq_datatype in ("DECIMAL", "FLOAT", "NUMERIC"):
return float(clean_number(raw_value))
if bq_datatype == "INTEGER":
return int(clean_number(raw_value))
return raw_value
elif self.parsing_methodology in [PARSING_METHOD_NORMALIZED_VALUES]:
normalized_value = field.normalized_value
if normalized_value is None:
return None
if bq_datatype == "STRING":
return normalized_value.text
if bq_datatype == "BOOLEAN":
return normalized_value.boolean_value
if bq_datatype == "DATETIME":
return normalized_value.datetime_value
if bq_datatype in ("DECIMAL", "FLOAT", "NUMERIC"):
return normalized_value.float_value
if bq_datatype == "INTEGER":
return normalized_value.integer_value
return raw_value
except ValueError as ve:
return ConversionError(
field.name,
field.value,
f"ValueError: casting to {bq_datatype}",
str(ve),
ConversionError.error_type_conversion,
)