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:
parent
66262d8dc2
commit
ba608093d3
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user