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
separator: "\t"
date_fmt: "%Y-%m-%d"
debit:
date: 0
text: 1
value: 3
Bank1:
<<: *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"))
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)

View File

@ -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