]> git.rmz.io Git - dotfiles.git/blob - bin/monzo.py
bin/maic: set pipefail to fail in case maim was cancelled
[dotfiles.git] / bin / monzo.py
1 #!/usr/bin/env python3
2
3 from datetime import datetime
4 import json
5 import sys
6
7 outformat = "qif"
8 # outformat = "csv"
9
10 class UnknownAccountError(Exception):
11 pass
12
13 def get_account(data):
14 account_id = data["transactions"][0]["account_id"]
15 if account_id == "":
16 return "Accounts:Monzo"
17 elif account_id == "":
18 return "Accounts:Joint Account"
19
20 raise UnknownAccountError(account_id)
21
22 if __name__ == "__main__":
23 with open(sys.argv[1], 'r') if len(sys.argv) > 1 else sys.stdin as fp:
24 data = json.load(fp)
25
26 if outformat == "qif":
27 print("!Account")
28 print("NCurrent {}".format(get_account(data)))
29 print("^")
30 print("!Type:Bank")
31
32 cnt = 1
33 for t in data.get("transactions"):
34 if t.get("decline_reason", ""):
35 continue
36
37 try:
38 date = datetime.strptime(t["created"], "%Y-%m-%dT%H:%M:%S.%fZ")
39 except ValueError:
40 date = datetime.strptime(t["created"], "%Y-%m-%dT%H:%M:%SZ")
41 amount = t["amount"] / 100
42 if "name" in t.get("counterparty", {}):
43 payee = t["counterparty"]["name"]
44 elif t["merchant"] is None:
45 payee = t["description"]
46 else:
47 payee = t["merchant"]["name"]
48 memo = t["description"]
49 memo += "\n{local_amount} {local_currency}".format(**t)
50 notes = t["notes"]
51 if outformat == "csv":
52 print('{date:%Y-%m-%d},{amount},"{payee}","{description}","{notes}"'.format(date=date,
53 payee=payee,
54 amount=amount,
55 **t))
56 elif outformat == "qif":
57 print("D{:%Y-%m-%d}".format(date))
58 print("T{}".format(amount))
59 print("P{}".format(payee))
60 print("M{}".format(memo))
61 print("#{}".format(t['id']))
62 print("^")
63 cnt += 1