Source code for beansoup.importers.td
"""Importers for TD Canada Trust."""
import csv as csvlib
import datetime
from beancount.core.number import D
from beansoup.importers import csv
csvlib.register_dialect('tdcanadatrust', delimiter=',', quoting=csvlib.QUOTE_MINIMAL)
[docs]class Importer(csv.Importer):
"""An importer for TD Canada Trust CSV statements."""
[docs] def parse(self, file):
"""Parse a TD Canada Trust CSV file.
Args:
file: A beansoup.ingest.cache.FileMemo instance; the CSV file to be parsed.
Returns:
A list of Row objects.
"""
return csv.parse(file, 'tdcanadatrust', self.parse_row)
[docs] def parse_row(self, row, lineno):
"""Parse a row of a TD Canada Trust CSV file.
Args:
row: A list of field values for the row.
lineno: The line number where the row appears in the CSV file
Returns:
A beansoup.importers.csv.Row object.
"""
if len(row) != 5:
raise csvlib.Error('Invalid row; expecting 5 values: {}'.format(row))
date = datetime.datetime.strptime(row[0], '%m/%d/%Y').date()
description = row[1]
amount = -D(row[2]) if row[2] else D(row[3])
balance = self.account_sign * D(row[4])
return csv.Row(lineno, date, description, amount, balance)