summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSiddhant Goel <me@sgoel.dev>2021-04-28 22:27:45 +0200
committerSiddhant Goel <me@sgoel.dev>2021-04-28 22:34:35 +0200
commite786b4843024bcd08087dab21f1e529f8a897f11 (patch)
tree441a68252d1379bcf9546999049a8afdd3be86c3
parent50c267604b5dc2d76b56179a7bcb079a78fa8596 (diff)
improvement: switch to csv.DictReader
-rw-r--r--beancount_ing_diba/ec.py38
-rw-r--r--tests/test_ec_importer.py53
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)