import csv from enum import IntEnum from lib.csv_loader import CSVLoader, CSVRow from lib.csv_loader.csv_loader import BoolValuePair, CSVRowDefaultConfig from lib.csv_loader.mapping_strategies import HeaderRemapField, MappingStrategyByHeader class ActionEnum(IntEnum): INSERT = 0 UPDATE = 1 DELETE = 2 class AssetRow(CSVRow): asset_action: ActionEnum asset_id: str brand_id: int model_id: int serial_number: str is_active: bool class Config(CSVRowDefaultConfig): bool_value_pair = BoolValuePair(true="YES", false="NO") def main(): with open("csv/assets-header-remap.csv", "r") as f: reader = csv.reader(f, delimiter=";") mapping_strategy = MappingStrategyByHeader( model_cls=AssetRow, header_remap_fields=[ HeaderRemapField(header_field="Asset Id", model_attr="asset_id"), HeaderRemapField(header_field="Action", model_attr="asset_action"), HeaderRemapField( header_field="Serial Number", model_attr="serial_number" ), HeaderRemapField(header_field="Brand Id", model_attr="brand_id"), HeaderRemapField(header_field="Model Id", model_attr="model_id"), HeaderRemapField(header_field="Is Active", model_attr="is_active"), ], ) csv_loader = CSVLoader[AssetRow]( reader=reader, output_model_cls=AssetRow, has_header=True, aggregate_errors=True, mapping_strategy=mapping_strategy, ) result = csv_loader.read_rows() "Results:" for row in result.rows: print(row) if result.has_errors(): print("Errors:") for error in result.errors: print(f"Line: {error.line_number}: {error.original_error}") if __name__ == "__main__": main()