import decimal import json from datetime import date, datetime, timezone from typing import List from sqlalchemy.engine import Row def format_row(record: Row, array_fields: List[str] = None) -> dict: """array_fields: list of snowflake arrays to parse""" if array_fields is None: array_fields = [] record = dict(record._mapping) if hasattr(record, "_mapping") else dict(record) for key, value in record.items(): if type(value) == datetime: record[key] = value.replace(tzinfo=timezone.utc).isoformat() continue if type(value) == date: record[key] = value.isoformat() continue if type(value) == decimal.Decimal: record[key] = float(value) continue if key in array_fields: if not value: record[key] = [] continue try: record[key] = json.loads(value) except ValueError: record[key] = [] return record