from abc import ABC from core.lib.db import convert, r class AggregatorClient(ABC): def store_account_info(self, account_infos): # account_infos = { # bank: accounts # for bank, accounts in account_info.items() # for account in accounts # #if account["account_id"] in self.banks # } # For each bank for bank, accounts in account_infos.items(): # Iterate the accounts for index, account in enumerate(list(accounts)): if "account_number" not in account: account_infos[bank][index]["account_number"] = {} fields = ["sort_code", "number", "iban"] for field in fields: if field in account: account_infos[bank][index]["account_number"][ field ] = account[field] del account_infos[bank][index][field] # if len(account["account_number"]) == 1: # account_infos[bank].remove(account) currencies = [ account["currency"] for bank, accounts in account_infos.items() for account in accounts ] for bank, accounts in account_infos.items(): if not self.instance.account_info: self.instance.account_info = {} self.instance.account_info[bank] = [] for account in accounts: self.instance.account_info[bank].append(account) # self.account_info = account_infos self.currencies = currencies self.instance.currencies = currencies self.instance.save() async def process_transactions(self, account_id, transactions): if not transactions: return False transaction_ids = [x["transaction_id"] for x in transactions] new_key_name = f"new.transactions.{self.instance.id}.{self.name}.{account_id}" old_key_name = f"transactions.{self.instance.id}.{self.name}.{account_id}" # for transaction_id in transaction_ids: if not transaction_ids: return r.sadd(new_key_name, *transaction_ids) difference = list(r.sdiff(new_key_name, old_key_name)) difference = convert(difference) new_transactions = [ x for x in transactions if x["transaction_id"] in difference ] # Rename the new key to the old key so we can run the diff again r.rename(new_key_name, old_key_name) for transaction in new_transactions: transaction["subclass"] = self.name # self.tx.transaction(transaction)