Update the parse operation

to coordinate with the manager
This commit is contained in:
Luís Murta 2023-01-06 22:05:01 +00:00
parent 55a5b09c45
commit 9500e808de
Signed by: satprog
GPG Key ID: 169EF1BBD7049F94
4 changed files with 35 additions and 47 deletions

View File

@ -16,6 +16,10 @@ if __name__ == "__main__":
params = None
match (op):
case pfbudget.Operation.Parse:
assert args.keys() >= {"path", "bank", "creditcard"}
params = [args["path"], args["bank"], args["creditcard"]]
case pfbudget.Operation.RequisitionId:
assert args.keys() >= {"name", "country"}, "argparser ill defined"
params = [args["name"][0], args["country"][0]]

View File

@ -86,20 +86,12 @@ def argparser() -> argparse.ArgumentParser:
)
p_export.set_defaults(func=lambda args: DatabaseClient(args.database).export())
"""
Parsing
"""
p_parse = subparsers.add_parser(
"parse",
description="Parses and adds the requested transactions into the selected database",
parents=[universal],
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
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.add_argument("--category", nargs=1, type=int)
p_parse.set_defaults(command=Operation.Parse)
# Parse from .csv
parse = subparsers.add_parser("parse")
parse.set_defaults(op=Operation.Parse)
parse.add_argument("path", nargs="+", type=str)
parse.add_argument("--bank", nargs=1, type=str)
parse.add_argument("--creditcard", nargs=1, type=str)
"""
Categorizing
@ -209,22 +201,6 @@ def argparser() -> argparse.ArgumentParser:
return parser
def parse(manager, args):
"""Parses the contents of the path in args to the selected database.
Args:
args (dict): argparse variables
"""
for path in args.path:
if (dir := Path(path)).is_dir():
for file in dir.iterdir():
manager.parse(file, vars(args))
elif Path(path).is_file():
manager.parse(path, vars(args))
else:
raise FileNotFoundError
def graph(args):
"""Plots the transactions over a period of time.

View File

@ -1,3 +1,5 @@
from pathlib import Path
from pfbudget.input.input import Input
from pfbudget.input.nordigen import NordigenInput
from pfbudget.input.parsers import parse_data
@ -17,8 +19,6 @@ from pfbudget.common.types import Operation
from pfbudget.core.categorizer import Categorizer
from pfbudget.utils import convert
from pfbudget.cli.runnable import parse
class Manager:
def __init__(self, db: str, verbosity: int = 0, args: dict = {}):
@ -34,9 +34,23 @@ class Manager:
match (op):
case Operation.Init:
pass
case Operation.Parse:
# TODO this is a monstrosity, remove when possible
parse(self, self.args)
# Adapter for the parse_data method. Can be refactored.
args = {"bank": params[1], "creditcard": params[2], "category": None}
transactions = []
for path in params[0]:
if (dir := Path(path)).is_dir():
for file in dir.iterdir():
transactions.extend(self.parse(file, args))
elif Path(path).is_file():
transactions.extend(self.parse(path, args))
else:
raise FileNotFoundError(path)
print(transactions)
if len(transactions) > 0 and input("Commit? (y/n)") == "y":
self.add_transactions(sorted(transactions))
case Operation.Download:
client = NordigenInput()
@ -44,8 +58,7 @@ class Manager:
client.start = params[0]
client.end = params[1]
transactions = client.parse()
with self.db.session() as session:
session.add(transactions)
self.add_transactions(transactions)
case Operation.Categorize:
with self.db.session() as session:
@ -143,14 +156,8 @@ class Manager:
# client = DatabaseClient(self.__db)
# client.unregister_bank(self.args["bank"][0])
def parser(self, parser: Input):
transactions = parser.parse()
print(transactions)
# self.add_transactions(transactions)
# def parse(self, filename: str):
# transactions = parse_data(filename, self.args)
# self.add_transactions(transactions)
def parse(self, filename: str, args: dict):
return parse_data(filename, args)
# def transactions() -> list[Transaction]:
# pass

View File

@ -4,7 +4,8 @@ from importlib import import_module
import datetime as dt
import yaml
from pfbudget.common.types import NoBankSelected, Transaction, Transactions
from pfbudget.common.types import NoBankSelected
from pfbudget.db.model import Transaction
from pfbudget.utils import utils
Index = namedtuple(
@ -43,7 +44,7 @@ Options = namedtuple(
)
def parse_data(filename: str, args: dict) -> Transactions:
def parse_data(filename: str, args: dict) -> list[Transaction]:
cfg: dict = yaml.safe_load(open("parsers.yaml"))
assert (
"Banks" in cfg
@ -157,7 +158,7 @@ class Parser:
category = line[options.category]
transaction = Transaction(date, text, bank, value, category)
else:
transaction = Transaction(date, text, bank, value, options.category)
transaction = Transaction(date, text, bank, value)
if options.additional_parser:
func(transaction)