From ba608093d3c7d012870091f2a5c48ffd69e3dbf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Murta?= Date: Wed, 7 Jul 2021 17:05:25 +0100 Subject: [PATCH] Fix parsing for files w/o bank_cc naming Fixes code flow for transactions' files with undescriptive filenames. Adds default indexing to support banks not described in parsers.yaml. Adds creditcard optional argument. Command line options now passed as `dict` instead of `Namespace` to `parse_data`. This will allow for an easier addition of future command line options. --- parsers.yaml | 4 ++++ pfbudget/parsers.py | 14 +++++++------- pfbudget/runnable.py | 5 +++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/parsers.yaml b/parsers.yaml index 512c960..465d7e6 100644 --- a/parsers.yaml +++ b/parsers.yaml @@ -12,6 +12,10 @@ default: &default encoding: utf-8 separator: "\t" date_fmt: "%Y-%m-%d" + debit: + date: 0 + text: 1 + value: 3 Bank1: <<: *default diff --git a/pfbudget/parsers.py b/pfbudget/parsers.py index 821383d..82f8a6d 100644 --- a/pfbudget/parsers.py +++ b/pfbudget/parsers.py @@ -34,25 +34,25 @@ Options = namedtuple( ) -def parse_data(db: DBManager, filename: str, bank: list = []) -> None: +def parse_data(db: DBManager, filename: str, args: dict) -> None: cfg: dict = yaml.safe_load(open("parsers.yaml")) assert ( "Banks" in cfg ), "parsers.yaml is missing the Banks section with the list of available banks" - if not bank: + if not args["bank"]: bank, creditcard = utils.find_credit_institution( filename, cfg.get("Banks"), cfg.get("CreditCards") ) else: - bank = bank[0] - creditcard = None + bank = args["bank"][0] + creditcard = None if not args["creditcard"] else args["creditcard"][0] - if creditcard: + if not creditcard: + options: dict = cfg[bank] + else: options: dict = cfg[bank][creditcard] bank += creditcard - else: - options: dict = cfg[bank] if options.get("additional_parser"): parser = getattr(import_module("pfbudget.parsers"), bank) diff --git a/pfbudget/runnable.py b/pfbudget/runnable.py index 3130dff..34c584d 100644 --- a/pfbudget/runnable.py +++ b/pfbudget/runnable.py @@ -65,6 +65,7 @@ def argparser() -> argparse.ArgumentParser: p_parse = subparsers.add_parser("parse", parents=[help]) p_parse.add_argument("path", nargs="+", type=str) p_parse.add_argument("--bank", nargs=1, type=str) + p_parse.add_argument("--creditcard", nargs=1, type=str) p_parse.set_defaults(func=parse) """ @@ -108,9 +109,9 @@ def parse(args): for path in args.path: if (dir := Path(path)).is_dir(): for file in dir.iterdir(): - parse_data(db, file, args.bank) + parse_data(db, file, vars(args)) elif Path(path).is_file(): - parse_data(db, path, args.bank) + parse_data(db, path, vars(args)) else: raise FileNotFoundError