Adds ArgumentParser to contain general arguments
Fix parser func arguments. The database should be passed as an argument, not used before parsing. Reordered and added logging to `DBManager` for better recording.
This commit is contained in:
parent
c51d31db47
commit
703acadaa9
@ -138,10 +138,11 @@ class DBManager:
|
|||||||
|
|
||||||
def __create_tables(self, tables: tuple[tuple]):
|
def __create_tables(self, tables: tuple[tuple]):
|
||||||
for table_name, query in tables:
|
for table_name, query in tables:
|
||||||
logger.info(f"Creating table if it doesn't exist {table_name}")
|
logger.info(f"Creating table {table_name} if it doesn't exist already")
|
||||||
self.__execute(query)
|
self.__execute(query)
|
||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
|
logging.info(f"Initializing {self.db} database")
|
||||||
self.__create_tables(
|
self.__create_tables(
|
||||||
(
|
(
|
||||||
("transactions", CREATE_TRANSACTIONS_TABLE),
|
("transactions", CREATE_TRANSACTIONS_TABLE),
|
||||||
@ -230,8 +231,8 @@ class DBManager:
|
|||||||
filename = pathlib.Path(
|
filename = pathlib.Path(
|
||||||
"@".join([self.db, datetime.datetime.now().isoformat()])
|
"@".join([self.db, datetime.datetime.now().isoformat()])
|
||||||
).with_suffix(".csv")
|
).with_suffix(".csv")
|
||||||
logger.info(f"Exporting {self.db} into {filename}")
|
|
||||||
transactions = self.select_all()
|
transactions = self.select_all()
|
||||||
|
logger.info(f"Exporting {self.db} into {filename}")
|
||||||
if not (dir := pathlib.Path(self.__EXPORT_DIR)).is_dir():
|
if not (dir := pathlib.Path(self.__EXPORT_DIR)).is_dir():
|
||||||
dir.mkdir()
|
dir.mkdir()
|
||||||
with open(dir / filename, "w", newline="") as f:
|
with open(dir / filename, "w", newline="") as f:
|
||||||
|
|||||||
@ -6,7 +6,6 @@ from .categories import categorize_data
|
|||||||
from .database import DBManager
|
from .database import DBManager
|
||||||
from .graph import discrete, monthly
|
from .graph import discrete, monthly
|
||||||
from .parsers import parse_data
|
from .parsers import parse_data
|
||||||
from .transactions import load_transactions, save_transactions
|
|
||||||
from . import report
|
from . import report
|
||||||
|
|
||||||
DEFAULT_DB = "data.db"
|
DEFAULT_DB = "data.db"
|
||||||
@ -25,9 +24,13 @@ class DataFileMissing(Exception):
|
|||||||
|
|
||||||
|
|
||||||
def argparser() -> argparse.ArgumentParser:
|
def argparser() -> argparse.ArgumentParser:
|
||||||
parser = argparse.ArgumentParser(description="does cool finance stuff")
|
help = argparse.ArgumentParser(add_help=False)
|
||||||
parser.add_argument("--db", help="select current database", default=DEFAULT_DB)
|
help.add_argument("--db", help="select current database", default=DEFAULT_DB)
|
||||||
parser.add_argument("-q", "--quiet", help="quiet")
|
help.add_argument("-q", "--quiet", help="quiet")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="does cool finance stuff", parents=[help]
|
||||||
|
)
|
||||||
parser.add_argument("--version")
|
parser.add_argument("--version")
|
||||||
|
|
||||||
subparsers = parser.add_subparsers(
|
subparsers = parser.add_subparsers(
|
||||||
@ -37,19 +40,19 @@ def argparser() -> argparse.ArgumentParser:
|
|||||||
"""
|
"""
|
||||||
Init
|
Init
|
||||||
"""
|
"""
|
||||||
p_init = subparsers.add_parser("init", help="init help")
|
p_init = subparsers.add_parser("init", parents=[help])
|
||||||
p_init.set_defaults(func=lambda args: DBManager(args.db))
|
p_init.set_defaults(func=lambda args: DBManager(args.db).init())
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Exporting
|
Exporting
|
||||||
"""
|
"""
|
||||||
p_export = subparsers.add_parser("export", help="export help")
|
p_export = subparsers.add_parser("export", parents=[help])
|
||||||
p_export.set_defaults(func=lambda args: DBManager(args.db).export())
|
p_export.set_defaults(func=lambda args: DBManager(args.db).export())
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Parsing
|
Parsing
|
||||||
"""
|
"""
|
||||||
p_parse = subparsers.add_parser("parse", help="parse help")
|
p_parse = subparsers.add_parser("parse", parents=[help])
|
||||||
p_parse.add_argument("path", nargs="+", type=str)
|
p_parse.add_argument("path", nargs="+", type=str)
|
||||||
p_parse.add_argument("--bank", nargs=1, type=str)
|
p_parse.add_argument("--bank", nargs=1, type=str)
|
||||||
p_parse.set_defaults(func=parse)
|
p_parse.set_defaults(func=parse)
|
||||||
@ -57,7 +60,7 @@ def argparser() -> argparse.ArgumentParser:
|
|||||||
"""
|
"""
|
||||||
Categorizing
|
Categorizing
|
||||||
"""
|
"""
|
||||||
p_categorize = subparsers.add_parser("categorize", help="parse help")
|
p_categorize = subparsers.add_parser("categorize", parents=[help])
|
||||||
p_categorize.set_defaults(func=categorize)
|
p_categorize.set_defaults(func=categorize)
|
||||||
|
|
||||||
p_graph = subparsers.add_parser("graph", help="graph help")
|
p_graph = subparsers.add_parser("graph", help="graph help")
|
||||||
@ -87,16 +90,14 @@ def argparser() -> argparse.ArgumentParser:
|
|||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
def parse(args, db):
|
def parse(args):
|
||||||
"""Parser
|
"""Parses the contents of the path in args to the selected database.
|
||||||
|
|
||||||
Parses the contents of the raw directory into the data files, and
|
|
||||||
categorizes the transactions
|
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
args (dict): argparse variables
|
args (dict): argparse variables
|
||||||
db (DBManager): db connection manager
|
db (DBManager): db connection manager
|
||||||
"""
|
"""
|
||||||
|
db = DBManager(args.db)
|
||||||
for path in args.path:
|
for path in args.path:
|
||||||
if (dir := Path(path)).is_dir():
|
if (dir := Path(path)).is_dir():
|
||||||
for file in dir.iterdir():
|
for file in dir.iterdir():
|
||||||
@ -107,17 +108,15 @@ def parse(args, db):
|
|||||||
raise FileNotFoundError
|
raise FileNotFoundError
|
||||||
|
|
||||||
|
|
||||||
def categorize(args, db):
|
def categorize(args):
|
||||||
"""Categorization
|
"""Automatically categorizes transactions based on the regex of each
|
||||||
|
category. Manually present the remaining to the user.
|
||||||
Automatically categorizes transactions based on the regex of each
|
|
||||||
category. Manually present the remaining to the user
|
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
args (dict): argparse variables
|
args (dict): argparse variables
|
||||||
db (DBManager): db connection manager
|
db (DBManager): db connection manager
|
||||||
"""
|
"""
|
||||||
categorize_data(db)
|
categorize_data(DBManager(args.db))
|
||||||
|
|
||||||
|
|
||||||
def status(state, args):
|
def status(state, args):
|
||||||
@ -177,6 +176,5 @@ def f_report(state, args):
|
|||||||
|
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
db = DBManager("transactions.db")
|
|
||||||
args = argparser().parse_args()
|
args = argparser().parse_args()
|
||||||
args.func(args, db)
|
args.func(args)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user