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.
This commit is contained in:
Luís Murta 2021-07-07 17:05:25 +01:00
parent 66262d8dc2
commit ba608093d3
Signed by: satprog
GPG Key ID: DDF2EFC6179009DC
3 changed files with 14 additions and 9 deletions

View File

@ -12,6 +12,10 @@ default: &default
encoding: utf-8 encoding: utf-8
separator: "\t" separator: "\t"
date_fmt: "%Y-%m-%d" date_fmt: "%Y-%m-%d"
debit:
date: 0
text: 1
value: 3
Bank1: Bank1:
<<: *default <<: *default

View File

@ -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")) cfg: dict = yaml.safe_load(open("parsers.yaml"))
assert ( assert (
"Banks" in cfg "Banks" in cfg
), "parsers.yaml is missing the Banks section with the list of available banks" ), "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( bank, creditcard = utils.find_credit_institution(
filename, cfg.get("Banks"), cfg.get("CreditCards") filename, cfg.get("Banks"), cfg.get("CreditCards")
) )
else: else:
bank = bank[0] bank = args["bank"][0]
creditcard = None 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] options: dict = cfg[bank][creditcard]
bank += creditcard bank += creditcard
else:
options: dict = cfg[bank]
if options.get("additional_parser"): if options.get("additional_parser"):
parser = getattr(import_module("pfbudget.parsers"), bank) parser = getattr(import_module("pfbudget.parsers"), bank)

View File

@ -65,6 +65,7 @@ def argparser() -> argparse.ArgumentParser:
p_parse = subparsers.add_parser("parse", parents=[help]) p_parse = subparsers.add_parser("parse", parents=[help])
p_parse.add_argument("path", nargs="+", type=str) p_parse.add_argument("path", nargs="+", type=str)
p_parse.add_argument("--bank", nargs=1, 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) p_parse.set_defaults(func=parse)
""" """
@ -108,9 +109,9 @@ def parse(args):
for path in args.path: for path in args.path:
if (dir := Path(path)).is_dir(): if (dir := Path(path)).is_dir():
for file in dir.iterdir(): for file in dir.iterdir():
parse_data(db, file, args.bank) parse_data(db, file, vars(args))
elif Path(path).is_file(): elif Path(path).is_file():
parse_data(db, path, args.bank) parse_data(db, path, vars(args))
else: else:
raise FileNotFoundError raise FileNotFoundError