From 2eecd2191af40ebc75d0a48850bcc60b75ab1733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Murta?= Date: Fri, 7 Aug 2020 20:47:17 +0100 Subject: [PATCH] Ancilliary methods to retrieve categories by type Get methods added for income, fixed expenses, variable expenses and discretionary expenses. Search has regex check to detect placeholder category. Removes the need for an additional search. --- categories.py | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/categories.py b/categories.py index 6b5f5e5..66f60ce 100644 --- a/categories.py +++ b/categories.py @@ -10,6 +10,9 @@ class Categories: range = () def search(self, t): + if not self.regex: + return False + if self.banks: return any( pattern.search(t.description.lower()) @@ -33,20 +36,13 @@ class Categories: @classmethod def categorize(cls, transactions): - - income_categories = [ - Income1().name, - Income2().name, - Income3().name, - ] - null_matches = Null().search_all(transactions) travel_matches = Travel().search_all( transactions, date(2019, 12, 23), date(2020, 1, 2) ) for i, transaction in enumerate(transactions): - for category in cls.get_categories(): + for category in [cat() for cat in cls.get_categories()]: if category.search(transaction): if not transaction.category: transaction.category = category.name @@ -71,7 +67,7 @@ class Categories: new_category = input("? ") if transaction in travel_matches and transaction.category not in [ - *income_categories, + *cls.get_income_categories(), ]: transaction.category = Travel().name if transaction in null_matches: @@ -79,7 +75,41 @@ class Categories: @classmethod def get_categories(cls): - return [category() for category in cls.__subclasses__()] + return cls.__subclasses__() + + @classmethod + def get_categories_names(cls): + return [cat.name for cat in cls.get_categories()] + + @classmethod + def get_income_categories(cls): + return [cat.name for cat in cls.get_categories() if "Income" in cat.name] + + @classmethod + def get_fixed_expenses(cls): + return [ + Utilities.name, + Commute.name, + ] + + @classmethod + def get_variable_expenses(cls): + return [Groceries.name] + + @classmethod + def get_discretionary_expenses(cls): + return [ + cat.name + for cat in cls.get_categories() + if cat.name + not in [ + *cls.get_income_categories(), + *cls.get_fixed_expenses(), + *cls.get_variable_expenses(), + Investment.name, + Null.name, + ] + ] class Income1(Categories):