From 5f2cb6fcf59d09b9bd52c6e54de600ad6780962d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Murta?= Date: Tue, 22 Nov 2022 22:09:40 +0000 Subject: [PATCH] [Fix] Improves logging for bank/creditcard parser When the credit card was correct but the bank was wrong, it was difficul to accertain which one was wrong. Not when one fails, it will also log what are the available options. --- pfbudget/input/parsers.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/pfbudget/input/parsers.py b/pfbudget/input/parsers.py index d974dee..22bd888 100644 --- a/pfbudget/input/parsers.py +++ b/pfbudget/input/parsers.py @@ -4,7 +4,7 @@ from importlib import import_module import datetime as dt import yaml -from pfbudget.common.types import Transaction +from pfbudget.common.types import NoBankSelected, Transaction, Transactions from pfbudget.utils import utils Index = namedtuple( @@ -43,7 +43,7 @@ Options = namedtuple( ) -def parse_data(filename: str, args: dict) -> None: +def parse_data(filename: str, args: dict) -> Transactions: cfg: dict = yaml.safe_load(open("parsers.yaml")) assert ( "Banks" in cfg @@ -57,17 +57,25 @@ def parse_data(filename: str, args: dict) -> None: bank = args["bank"][0] creditcard = None if not args["creditcard"] else args["creditcard"][0] - if not creditcard: + try: options: dict = cfg[bank] - else: - options: dict = cfg[bank][creditcard] + except KeyError as e: + banks = cfg["Banks"] + raise NoBankSelected(f"{e} not a valid bank, try one of {banks}") + + if creditcard: + try: + options = options[creditcard] + except KeyError as e: + creditcards = cfg["CreditCards"] + raise NoBankSelected(f"{e} not a valid bank, try one of {creditcards}") bank += creditcard if args["category"]: options["category"] = args["category"][0] if options.get("additional_parser"): - parser = getattr(import_module("pfbudget.parsers"), bank) + parser = getattr(import_module("pfbudget.input.parsers"), bank) transactions = parser(filename, bank, options).parse() else: transactions = Parser(filename, bank, options).parse()