Update the parse operation
to coordinate with the manager
This commit is contained in:
parent
55a5b09c45
commit
9500e808de
@ -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]]
|
||||
|
||||
@ -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.
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user