Files
Card-data-sorting/expenses/services.py

37 lines
1020 B
Python

from __future__ import annotations
from typing import Iterable
from .csv_parsers import get_parser
from .models import Expense
class CSVImportResult:
def __init__(self, imported: int, duplicated: int) -> None:
self.imported = imported
self.duplicated = duplicated
def import_csv_lines(lines: Iterable[str]) -> CSVImportResult:
buffered_lines = list(lines)
parser = get_parser(buffered_lines)
rows = parser.parse(buffered_lines)
imported = 0
duplicated = 0
for row in rows:
expense, created = Expense.objects.get_or_create(
source=row.source,
source_hash=row.source_hash,
defaults={
'use_date': row.use_date,
'description': row.description,
'amount': row.amount,
'note': row.note,
},
)
if created:
imported += 1
else:
duplicated += 1
return CSVImportResult(imported=imported, duplicated=duplicated)