CLI now allow --no-nulls flag on categorize

Null categorization, which is a major time slog, may now be disabled.
This commit is contained in:
Luís Murta 2023-04-12 18:20:57 +01:00
parent 6b26651d22
commit 2cbf00a939
Signed by: satprog
GPG Key ID: 169EF1BBD7049F94
4 changed files with 21 additions and 9 deletions

View File

@ -25,6 +25,12 @@ if __name__ == "__main__":
Interactive(Manager(db, verbosity)).start() Interactive(Manager(db, verbosity)).start()
exit() exit()
case Operation.Categorize:
keys = {"no_nulls"}
assert args.keys() >= keys, f"missing {args.keys() - keys}"
params = [args["no_nulls"]]
case Operation.Parse: case Operation.Parse:
keys = {"path", "bank", "creditcard"} keys = {"path", "bank", "creditcard"}
assert args.keys() >= keys, f"missing {args.keys() - keys}" assert args.keys() >= keys, f"missing {args.keys() - keys}"

View File

@ -78,7 +78,10 @@ def argparser() -> argparse.ArgumentParser:
# Automatic/manual categorization # Automatic/manual categorization
categorize = subparsers.add_parser("categorize").add_subparsers(required=True) categorize = subparsers.add_parser("categorize").add_subparsers(required=True)
categorize.add_parser("auto").set_defaults(op=Operation.Categorize) auto = categorize.add_parser("auto")
auto.set_defaults(op=Operation.Categorize)
auto.add_argument("--no-nulls", action="store_false")
categorize.add_parser("manual").set_defaults(op=Operation.ManualCategorization) categorize.add_parser("manual").set_defaults(op=Operation.ManualCategorization)
""" """

View File

@ -16,6 +16,7 @@ class Categorizer:
transactions: Sequence[t.BankTransaction], transactions: Sequence[t.BankTransaction],
categories: Sequence[t.Category], categories: Sequence[t.Category],
tags: Sequence[t.Tag], tags: Sequence[t.Tag],
nullify: bool = True
): ):
"""Overarching categorization tool """Overarching categorization tool
@ -28,14 +29,16 @@ class Categorizer:
tags (Sequence[Tag]): currently available tags tags (Sequence[Tag]): currently available tags
""" """
try: if nullify:
null = next(cat for cat in categories if cat.name == "null") try:
print("Nullifying") null = next(cat for cat in categories if cat.name == "null")
self._nullify(transactions, null) print("Nullifying")
self._nullify(transactions, null)
categories = [cat for cat in categories if cat.name != "null"] except StopIteration:
except StopIteration: print("Null category not defined")
print("Null category not defined")
categories = [cat for cat in categories if cat.name != "null"]
self._rule_based_categories(transactions, categories) self._rule_based_categories(transactions, categories)
self._rule_based_tags(transactions, tags) self._rule_based_tags(transactions, tags)

View File

@ -97,7 +97,7 @@ class Manager:
) )
categories = session.get(Category) categories = session.get(Category)
tags = session.get(Tag) tags = session.get(Tag)
Categorizer().rules(uncategorized, categories, tags) Categorizer().rules(uncategorized, categories, tags, params[0])
case Operation.BankMod: case Operation.BankMod:
with self.db.session() as session: with self.db.session() as session: