diff --git a/main.py b/main.py index 74fd255..aa04e8f 100644 --- a/main.py +++ b/main.py @@ -8,9 +8,6 @@ import pfbudget.report as report import pfbudget.tools as tools -p = ".pfbudget/state" - - class PfBudgetInitialized(Exception): pass @@ -34,7 +31,7 @@ def init(state, args): """ if not state: s = dict( - filename=p, + filename=tools.STATE_FILE, raw_dir=args.raw, data_dir=args.data, raw_files=[], @@ -43,8 +40,15 @@ def init(state, args): last_backup="", last_datadir_backup="", ) - state = tools.pfstate(p, s) - parse(state, args) + try: + state = tools.pfstate(tools.STATE_FILE, s) + parse(state, args) + except Exception as e: + print(e) + if Path(tools.STATE_FILE).is_file(): + print(f"Deleting {tools.STATE_FILE}") + Path(tools.STATE_FILE).unlink() + else: raise PfBudgetInitialized() @@ -244,17 +248,6 @@ if __name__ == "__main__": p_graph.set_defaults(func=graph) p_report.set_defaults(func=f_report) - state = tools.pfstate(p) - state.filename = p + state = tools.pfstate(tools.STATE_FILE) args = parser.parse_args() args.func(state, args) - - # income = [sum(t.value for cat, transactions in months.items() for t in transactions - # if cat in get_income_categories()) for months in monthly_transactions_by_cat] - - # expenses = [] - # for category in expense_categories: - # expense_value = [-sum(t.value for t in month[category]) for month in monthly_transactions_by_cat] - # expenses.extend(expense_value) - - # print("Income: {}, Expenses: {}, Net = {}"".format(sum(income), sum(expenses), sum(income) - sum(expenses))) diff --git a/pfbudget/tools.py b/pfbudget/tools.py index bdedfeb..fe801b5 100644 --- a/pfbudget/tools.py +++ b/pfbudget/tools.py @@ -1,6 +1,7 @@ from pathlib import Path import csv import datetime as dt +import os import pickle import shutil @@ -14,15 +15,24 @@ from .transactions import ( from .parsers import parse_data +DIR = ".pfbudget/" +STATE_FILE = DIR + "state" +BACKUP_DIR = DIR + "backup/" + + def get_filename(t: Transaction): return "{}_{}.csv".format(t.year, t.bank) class PFState: - def __init__(self, filename, *args, **kwargs): + def __init__(self, filename: str, *args, **kwargs): if Path(filename).is_file(): raise FileExistsError("PFState already exists") + if not Path(filename).parent.is_dir(): + Path(filename).parent.mkdir(parents=True) + (Path(filename).parent / "backup/").mkdir(parents=True) + self.filename = filename for d in args: for k in d: @@ -30,7 +40,11 @@ class PFState: for k in kwargs: setattr(self, k, kwargs[k]) - self._save() + if not Path(self.raw_dir).is_dir(): + Path(self.raw_dir).mkdir(parents=True) + + if not Path(self.data_dir).is_dir(): + Path(self.data_dir).mkdir(parents=True) @property def filename(self): @@ -153,7 +167,7 @@ def pfstate(filename, *args, **kwargs): def backup(state: PFState): transactions = load_transactions(state.data_dir) filename = ( - ".pfbudget/backups/" + BACKUP_DIR + "transactions_" + dt.datetime.now().strftime("%Y-%m-%d_%Hh%Mm%Ss") + ".csv" @@ -164,7 +178,7 @@ def backup(state: PFState): def full_backup(state: PFState): - filename = ".pfbudget/backups/" + dt.datetime.now().strftime("%Y-%m-%d_%Hh%Mm%Ss") + filename = BACKUP_DIR + dt.datetime.now().strftime("%Y-%m-%d_%Hh%Mm%Ss") shutil.copytree(state.data_dir, Path(filename)) state.last_datadir_backup = filename