get all transactions before the while loop, un-PEP8'd

This commit is contained in:
2017-05-23 23:09:47 -04:00
parent 1bc6010e75
commit 4617d2d9ba
2 changed files with 31 additions and 15 deletions

5
splurgebot.md Normal file
View File

@@ -0,0 +1,5 @@
Budgeting. You do it, then you stop doing it. You wake up in a cold sweat and you start tracking your spending again. It sucks: You stop.
There are tools! Horrible, awful tools that are glorified spreadsheets which think all your Amazon purchases go under `books`. Much data entered, many hairs pulled out.
Surely this is fodder for a bot.

View File

@@ -3,6 +3,7 @@ import os
import time import time
from typing import List from typing import List
import math
from twilio.rest import Client as TwilioClient from twilio.rest import Client as TwilioClient
from plaid import Client as PlaidClient from plaid import Client as PlaidClient
@@ -12,44 +13,54 @@ ALERT_FOR_TRANSACTIONS_GTE = 500
MY_CELL = os.getenv('MY_CELL') MY_CELL = os.getenv('MY_CELL')
MY_TWILIO_NUM = os.getenv('MY_TWILIO_NUM') MY_TWILIO_NUM = os.getenv('MY_TWILIO_NUM')
PLAID_ENV = os.getenv('PLAID_ENV') or 'sandbox' PLAID_ENV = os.getenv('PLAID_ENV') or 'sandbox'
# this is an access ID from Plaid for a specific user and bank/credit account # this is an access ID from Plaid for a specific user and bank/credit account
PLAID_ACCESS_ID = os.getenv('PLAID_ACCESS_ID') PLAID_ACCESS_ID = os.getenv('PLAID_ACCESS_ID')
plaid_client = PlaidClient(client_id=os.getenv('PLAID_CLIENT_ID'), plaid_client = PlaidClient(client_id=os.getenv('PLAID_CLIENT_ID'), secret=os.getenv('PLAID_SECRET'),
secret=os.getenv('PLAID_SECRET'), public_key=os.getenv('PLAID_PUBLIC_KEY'), environment=PLAID_ENV)
public_key=os.getenv('PLAID_PUBLIC_KEY'),
environment=PLAID_ENV)
twilio_client = TwilioClient(os.getenv('TWILIO_SID'), twilio_client = TwilioClient(os.getenv('TWILIO_SID'), os.getenv('TWILIO_TOKEN'))
os.getenv('TWILIO_TOKEN'))
transaction_ids = set() transaction_ids = set()
def get_all_transactions() -> List[dict]:
today = datetime.date.today().strftime('%Y-%m-%d')
total_transactions: int = plaid_client.Transactions.get(PLAID_ACCESS_ID, '1972-01-01', today)['total_transactions']
all_transactions = []
for page in range(math.ceil(total_transactions / 500)):
all_transactions += plaid_client.Transactions.get(PLAID_ACCESS_ID, '1972-01-01', today,
offset=page * 500, count=500)['transactions']
return all_transactions
def get_latest_transactions() -> List[dict]: def get_latest_transactions() -> List[dict]:
"""get 100 most recent transactions""" """get 100 most recent transactions"""
today = datetime.date.today().strftime('%Y-%m-%d') today = datetime.date.today().strftime('%Y-%m-%d')
return [transaction return [transaction
for transaction in plaid_client.Transactions.get( for transaction in
PLAID_ACCESS_ID, '1972-01-01', today)['transactions'] plaid_client.Transactions.get(PLAID_ACCESS_ID, '1972-01-01', today)['transactions']
if transaction['transaction_id'] not in transaction_ids] if transaction['transaction_id'] not in transaction_ids]
def alert(transaction: dict) -> None: def alert(transaction: dict) -> None:
message = ( message = (f'hey, a transaction hit your account that exceeds ${ALERT_FOR_TRANSACTIONS_GTE}: '
'hey, a transaction hit your account that exceeds ' f'{transaction["date"]} {transaction["name"]} ${transaction["amount"]}')
f'${ALERT_FOR_TRANSACTIONS_GTE}: '
f'{transaction["date"]} {transaction["name"]} ${transaction["amount"]}')
twilio_client.api.account.messages.create(to=MY_CELL, twilio_client.api.account.messages.create(to=MY_CELL, from_=MY_TWILIO_NUM, body=message)
from_=MY_TWILIO_NUM,
body=message)
def main() -> None: def main() -> None:
if len(transaction_ids) == 0:
transaction_ids.update(transaction['transaction_id'] for transaction in get_all_transactions())
while True: while True:
for transaction in get_latest_transactions(): for transaction in get_latest_transactions():
transaction_ids.add(transaction['transaction_id']) transaction_ids.add(transaction['transaction_id'])
if transaction['amount'] >= ALERT_FOR_TRANSACTIONS_GTE: if transaction['amount'] >= ALERT_FOR_TRANSACTIONS_GTE:
alert(transaction) alert(transaction)