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
|
params = None
|
||||||
match (op):
|
match (op):
|
||||||
|
case pfbudget.Operation.Parse:
|
||||||
|
assert args.keys() >= {"path", "bank", "creditcard"}
|
||||||
|
params = [args["path"], args["bank"], args["creditcard"]]
|
||||||
|
|
||||||
case pfbudget.Operation.RequisitionId:
|
case pfbudget.Operation.RequisitionId:
|
||||||
assert args.keys() >= {"name", "country"}, "argparser ill defined"
|
assert args.keys() >= {"name", "country"}, "argparser ill defined"
|
||||||
params = [args["name"][0], args["country"][0]]
|
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())
|
p_export.set_defaults(func=lambda args: DatabaseClient(args.database).export())
|
||||||
|
|
||||||
"""
|
# Parse from .csv
|
||||||
Parsing
|
parse = subparsers.add_parser("parse")
|
||||||
"""
|
parse.set_defaults(op=Operation.Parse)
|
||||||
p_parse = subparsers.add_parser(
|
parse.add_argument("path", nargs="+", type=str)
|
||||||
"parse",
|
parse.add_argument("--bank", nargs=1, type=str)
|
||||||
description="Parses and adds the requested transactions into the selected database",
|
parse.add_argument("--creditcard", nargs=1, type=str)
|
||||||
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)
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Categorizing
|
Categorizing
|
||||||
@ -209,22 +201,6 @@ def argparser() -> argparse.ArgumentParser:
|
|||||||
return parser
|
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):
|
def graph(args):
|
||||||
"""Plots the transactions over a period of time.
|
"""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.input import Input
|
||||||
from pfbudget.input.nordigen import NordigenInput
|
from pfbudget.input.nordigen import NordigenInput
|
||||||
from pfbudget.input.parsers import parse_data
|
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.core.categorizer import Categorizer
|
||||||
from pfbudget.utils import convert
|
from pfbudget.utils import convert
|
||||||
|
|
||||||
from pfbudget.cli.runnable import parse
|
|
||||||
|
|
||||||
|
|
||||||
class Manager:
|
class Manager:
|
||||||
def __init__(self, db: str, verbosity: int = 0, args: dict = {}):
|
def __init__(self, db: str, verbosity: int = 0, args: dict = {}):
|
||||||
@ -34,9 +34,23 @@ class Manager:
|
|||||||
match (op):
|
match (op):
|
||||||
case Operation.Init:
|
case Operation.Init:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
case Operation.Parse:
|
case Operation.Parse:
|
||||||
# TODO this is a monstrosity, remove when possible
|
# Adapter for the parse_data method. Can be refactored.
|
||||||
parse(self, self.args)
|
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:
|
case Operation.Download:
|
||||||
client = NordigenInput()
|
client = NordigenInput()
|
||||||
@ -44,8 +58,7 @@ class Manager:
|
|||||||
client.start = params[0]
|
client.start = params[0]
|
||||||
client.end = params[1]
|
client.end = params[1]
|
||||||
transactions = client.parse()
|
transactions = client.parse()
|
||||||
with self.db.session() as session:
|
self.add_transactions(transactions)
|
||||||
session.add(transactions)
|
|
||||||
|
|
||||||
case Operation.Categorize:
|
case Operation.Categorize:
|
||||||
with self.db.session() as session:
|
with self.db.session() as session:
|
||||||
@ -143,14 +156,8 @@ class Manager:
|
|||||||
# client = DatabaseClient(self.__db)
|
# client = DatabaseClient(self.__db)
|
||||||
# client.unregister_bank(self.args["bank"][0])
|
# client.unregister_bank(self.args["bank"][0])
|
||||||
|
|
||||||
def parser(self, parser: Input):
|
def parse(self, filename: str, args: dict):
|
||||||
transactions = parser.parse()
|
return parse_data(filename, args)
|
||||||
print(transactions)
|
|
||||||
# self.add_transactions(transactions)
|
|
||||||
|
|
||||||
# def parse(self, filename: str):
|
|
||||||
# transactions = parse_data(filename, self.args)
|
|
||||||
# self.add_transactions(transactions)
|
|
||||||
|
|
||||||
# def transactions() -> list[Transaction]:
|
# def transactions() -> list[Transaction]:
|
||||||
# pass
|
# pass
|
||||||
|
|||||||
@ -4,7 +4,8 @@ from importlib import import_module
|
|||||||
import datetime as dt
|
import datetime as dt
|
||||||
import yaml
|
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
|
from pfbudget.utils import utils
|
||||||
|
|
||||||
Index = namedtuple(
|
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"))
|
cfg: dict = yaml.safe_load(open("parsers.yaml"))
|
||||||
assert (
|
assert (
|
||||||
"Banks" in cfg
|
"Banks" in cfg
|
||||||
@ -157,7 +158,7 @@ class Parser:
|
|||||||
category = line[options.category]
|
category = line[options.category]
|
||||||
transaction = Transaction(date, text, bank, value, category)
|
transaction = Transaction(date, text, bank, value, category)
|
||||||
else:
|
else:
|
||||||
transaction = Transaction(date, text, bank, value, options.category)
|
transaction = Transaction(date, text, bank, value)
|
||||||
|
|
||||||
if options.additional_parser:
|
if options.additional_parser:
|
||||||
func(transaction)
|
func(transaction)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user