From 9fa704811cb53ea78d4ea5b40a2c8f7360ae0530 Mon Sep 17 00:00:00 2001 From: Herculino Trotta Date: Tue, 28 Jan 2025 21:24:23 -0300 Subject: [PATCH] feat(import:v1): accept list as source, first valid one will be used. --- app/apps/import_app/schemas/v1.py | 2 +- app/apps/import_app/services/v1.py | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/apps/import_app/schemas/v1.py b/app/apps/import_app/schemas/v1.py index 01ae643..7289140 100644 --- a/app/apps/import_app/schemas/v1.py +++ b/app/apps/import_app/schemas/v1.py @@ -65,7 +65,7 @@ class CSVImportSettings(BaseModel): class ColumnMapping(BaseModel): - source: Optional[str] = Field( + source: Optional[str] | Optional[list[str]] = Field( default=None, description="CSV column header. If None, the field will be generated from transformations", ) diff --git a/app/apps/import_app/services/v1.py b/app/apps/import_app/services/v1.py index d84935e..1d72b1e 100644 --- a/app/apps/import_app/services/v1.py +++ b/app/apps/import_app/services/v1.py @@ -486,8 +486,18 @@ class ImportService: mapped_data = {} for field, mapping in self.mapping.items(): - # If source is None, use None as the initial value - value = row.get(mapping.source) if mapping.source else None + value = None + + if isinstance(mapping.source, str): + value = row.get(mapping.source) + elif isinstance(mapping.source, list): + for source in mapping.source: + value = row.get(source) + if value is not None: + break + else: + # If source is None, use None as the initial value + value = None # Use default_value if value is None if value is None: