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()
exit()
case Operation.Categorize:
keys = {"no_nulls"}
assert args.keys() >= keys, f"missing {args.keys() - keys}"
params = [args["no_nulls"]]
case Operation.Parse:
keys = {"path", "bank", "creditcard"}
assert args.keys() >= keys, f"missing {args.keys() - keys}"

View File

@ -78,7 +78,10 @@ def argparser() -> argparse.ArgumentParser:
# Automatic/manual categorization
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)
"""

View File

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

View File

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