From f2d32fd7e927d9f5639799613cffb1d34fbff11a Mon Sep 17 00:00:00 2001 From: Herculino Trotta Date: Thu, 23 Jan 2025 23:52:54 -0300 Subject: [PATCH] feat(import): final changes for release --- app/apps/import_app/schemas/v1.py | 9 ++------- app/apps/import_app/services/v1.py | 23 +++++++++++++---------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/app/apps/import_app/schemas/v1.py b/app/apps/import_app/schemas/v1.py index 07bb5e6..01ae643 100644 --- a/app/apps/import_app/schemas/v1.py +++ b/app/apps/import_app/schemas/v1.py @@ -7,12 +7,6 @@ class CompareDeduplicationRule(BaseModel): fields: list[str] = Field(..., description="Compare fields for deduplication") match_type: Literal["lax", "strict"] = "lax" - @field_validator("fields", mode="before") - def coerce_fields_to_dict(cls, v): - if isinstance(v, list): - return {k: v for d in v for k, v in d.items()} - return v - class ReplaceTransformationRule(BaseModel): type: Literal["replace", "regex"] = Field( @@ -103,7 +97,7 @@ class TransactionTypeMapping(ColumnMapping): class TransactionIsPaidMapping(ColumnMapping): target: Literal["is_paid"] = Field(..., description="Transaction field to map to") - detection_method: Literal["sign", "boolean", "always_paid", "always_unpaid"] + detection_method: Literal["boolean", "always_paid", "always_unpaid"] coerce_to: Literal["is_paid"] = Field("is_paid", frozen=True) @@ -151,6 +145,7 @@ class TransactionTagsMapping(ColumnMapping): class TransactionEntitiesMapping(ColumnMapping): target: Literal["entities"] = Field(..., description="Transaction field to map to") + type: Literal["id", "name"] = "name" create: bool = Field( default=True, description="Create new entities if they doesn't exist" ) diff --git a/app/apps/import_app/services/v1.py b/app/apps/import_app/services/v1.py index dcd5e75..4e8d8c0 100644 --- a/app/apps/import_app/services/v1.py +++ b/app/apps/import_app/services/v1.py @@ -296,14 +296,19 @@ class ImportService: for entity_name in entity_names: try: if entities_mapping: - if getattr(entities_mapping, "create", False): - entity, _ = TransactionEntity.objects.get_or_create( - name=entity_name.strip() - ) - else: - entity = TransactionEntity.objects.filter( - name=entity_name.strip() + if entities_mapping.type == "id": + entity = TransactionTag.objects.filter( + id=entity_name ).first() + else: # name + if getattr(entities_mapping, "create", False): + entity, _ = TransactionEntity.objects.get_or_create( + name=entity_name.strip() + ) + else: + entity = TransactionEntity.objects.filter( + name=entity_name.strip() + ).first() if entity: entities.append(entity) @@ -468,9 +473,7 @@ class ImportService: raise ValueError("Invalid transaction type detection method") elif coerce_to == "is_paid": if isinstance(mapping, version_1.TransactionIsPaidMapping): - if mapping.detection_method == "sign": - return not value.startswith("-") - elif mapping.detection_method == "boolean": + if mapping.detection_method == "boolean": return value.lower() in ["true", "1", "yes", "y", "on"] elif mapping.detection_method == "always_paid": return True