diff options
author | Siddhant Goel <me@sgoel.dev> | 2021-04-28 22:27:45 +0200 |
---|---|---|
committer | Siddhant Goel <me@sgoel.dev> | 2021-04-28 22:34:35 +0200 |
commit | e786b4843024bcd08087dab21f1e529f8a897f11 (patch) | |
tree | 441a68252d1379bcf9546999049a8afdd3be86c3 | |
parent | 50c267604b5dc2d76b56179a7bcb079a78fa8596 (diff) |
improvement: switch to csv.DictReader
-rw-r--r-- | beancount_ing_diba/ec.py | 38 | ||||
-rw-r--r-- | tests/test_ec_importer.py | 53 |
2 files changed, 59 insertions, 32 deletions
diff --git a/beancount_ing_diba/ec.py b/beancount_ing_diba/ec.py index 08454ef..3f3f99b 100644 --- a/beancount_ing_diba/ec.py +++ b/beancount_ing_diba/ec.py @@ -10,18 +10,6 @@ from beancount.ingest import importer BANKS = ('ING', 'ING-DiBa') -FIELDS = ( - 'Buchung', - 'Valuta', - 'Auftraggeber/Empfänger', - 'Buchungstext', - 'Verwendungszweck', - 'Saldo', - 'Währung', - 'Betrag', - 'Währung', -) - META_KEYS = ('IBAN', 'Kontoname', 'Bank', 'Kunde', 'Zeitraum', 'Saldo') PRE_HEADER = ( @@ -47,7 +35,9 @@ def _format_number_de(value: str) -> Decimal: class ECImporter(importer.ImporterProtocol): - def __init__(self, iban, account, user, file_encoding='ISO-8859-1'): + def __init__( + self, iban, account, user, file_encoding='ISO-8859-1', + ): self.iban = _format_iban(iban) self.account = account self.user = user @@ -199,25 +189,17 @@ class ECImporter(importer.ImporterProtocol): _read_empty_line() # Data entries - reader = csv.reader( + reader = csv.DictReader( fd, delimiter=';', quoting=csv.QUOTE_MINIMAL, quotechar='"' ) for line in reader: - if line == list(FIELDS): - continue - - ( - date, # Buchung - _, # Valuta - payee, # Auftraggeber/Empfänger - booking_text, # Buchungstext - description, # Verwendungszweck - _, # Saldo - _, # Währung - amount, # Betrag - currency, # Währung - ) = line + date = line['Buchung'] + payee = line['Auftraggeber/Empfänger'] + booking_text = line['Buchungstext'] + description = line['Verwendungszweck'] + amount = line['Betrag'] + currency = line['Währung'] meta = data.new_metadata(file_.name, self._line_index) diff --git a/tests/test_ec_importer.py b/tests/test_ec_importer.py index 194e382..082f87f 100644 --- a/tests/test_ec_importer.py +++ b/tests/test_ec_importer.py @@ -5,10 +5,23 @@ from textwrap import dedent from unittest import TestCase import os -from beancount_ing_diba.ec import BANKS, ECImporter, FIELDS, PRE_HEADER +from beancount_ing_diba.ec import BANKS, ECImporter, PRE_HEADER -HEADER = ';'.join('"{}"'.format(field) for field in FIELDS) +HEADER = ';'.join( + '"{}"'.format(field) + for field in ( + 'Buchung', + 'Valuta', + 'Auftraggeber/Empfänger', + 'Buchungstext', + 'Verwendungszweck', + 'Saldo', + 'Währung', + 'Betrag', + 'Währung', + ) +) def path_for_temp_file(name): @@ -17,7 +30,7 @@ def path_for_temp_file(name): class ECImporterTestCase(TestCase): def setUp(self): - super(ECImporterTestCase, self).setUp() + super().setUp() self.iban = 'DE99999999999999999999' self.formatted_iban = 'DE99 9999 9999 9999 9999 99' @@ -28,7 +41,7 @@ class ECImporterTestCase(TestCase): if os.path.isfile(self.filename): os.remove(self.filename) - super(ECImporterTestCase, self).tearDown() + super().tearDown() def _format_data(self, string, **kwargs): kwargs.update( @@ -262,3 +275,35 @@ class ECImporterTestCase(TestCase): transactions = importer.extract(fd) self.assertEqual(len(transactions), 1) + + def test_category_included(self): + with open(self.filename, 'wb') as fd: + fd.write( + self._format_data( + ''' + Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 + ;Letztes Update: aktuell + + IBAN;{formatted_iban} + Kontoname;Extra-Konto + Bank;ING-DiBa + Kunde;{user} + Zeitraum;01.06.2018 - 30.06.2018 + Saldo;5.000,00;EUR + + Sortierung;Datum absteigend + + {pre_header} + + "Buchung";"Valuta";"Auftraggeber/Empfänger";"Buchungstext";"Kategorie";"Verwendungszweck";"Saldo";"Währung";"Betrag";"Währung" + 08.06.2018;08.06.2018;REWE Filialen Voll;Gutschrift;Kategorie;REWE SAGT DANKE;1.234,00;EUR;-500,00;EUR + ''' # NOQA + ) + ) + + importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) + + with open(self.filename) as fd: + transactions = importer.extract(fd) + + self.assertEqual(len(transactions), 1) |