Compare commits

...

3 Commits

Author SHA1 Message Date
5af05c2fa4
Print the transaction ID 2023-04-12 18:23:24 +01:00
2cbf00a939
CLI now allow --no-nulls flag on categorize
Null categorization, which is a major time slog, may now be disabled.
2023-04-12 18:20:57 +01:00
6b26651d22
Option eua now takes id instead of bank name 2023-04-12 18:19:24 +01:00
6 changed files with 24 additions and 12 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)
""" """
@ -129,7 +132,7 @@ def argparser() -> argparse.ArgumentParser:
# Nordigen requisition id # Nordigen requisition id
requisition = subparsers.add_parser("eua") requisition = subparsers.add_parser("eua")
requisition.set_defaults(op=Operation.RequisitionId) requisition.set_defaults(op=Operation.RequisitionId)
requisition.add_argument("name", nargs=1, type=str) requisition.add_argument("id", nargs=1, type=str)
requisition.add_argument("country", nargs=1, type=str) requisition.add_argument("country", nargs=1, type=str)
# Download through the Nordigen API # Download through the Nordigen API

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:

View File

@ -106,6 +106,7 @@ class Transaction(Base, Export):
@property @property
def format(self) -> dict[str, Any]: def format(self) -> dict[str, Any]:
return dict( return dict(
id=self.id,
date=self.date, date=self.date,
description=self.description, description=self.description,
amount=self.amount, amount=self.amount,

View File

@ -86,8 +86,7 @@ class NordigenInput(Input):
print(f"New access token: {token}") print(f"New access token: {token}")
return token return token
def requisition(self, institution: str, country: str = "PT"): def requisition(self, id: str, country: str = "PT"):
id = self._client.institution.get_institution_id_by_name(country, institution)
requisition = self._client.initialize_session( requisition = self._client.initialize_session(
redirect_uri=self.redirect_url, redirect_uri=self.redirect_url,
institution_id=id, institution_id=id,