Files
csv-loader-generics-present…/loader_3_header_mapper.py
Eden Kirin c5a0008236 CSV Loader
2023-02-16 15:43:21 +01:00

66 lines
1.9 KiB
Python

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()