#!/usr/bin/env python3 from datetime import datetime import json import sys outformat = "qif" # outformat = "csv" class UnknownAccountError(Exception): pass def get_account(data): account_id = data["transactions"][0]["account_id"] if account_id == "": return "Accounts:Monzo" elif account_id == "": return "Accounts:Joint Account" raise UnknownAccountError(account_id) if __name__ == "__main__": with open(sys.argv[1], 'r') if len(sys.argv) > 1 else sys.stdin as fp: data = json.load(fp) if outformat == "qif": print("!Account") print("NCurrent {}".format(get_account(data))) print("^") print("!Type:Bank") cnt = 1 for t in data.get("transactions"): if t.get("decline_reason", ""): continue try: date = datetime.strptime(t["created"], "%Y-%m-%dT%H:%M:%S.%fZ") except ValueError: date = datetime.strptime(t["created"], "%Y-%m-%dT%H:%M:%SZ") amount = t["amount"] / 100 if "name" in t.get("counterparty", {}): payee = t["counterparty"]["name"] elif t["merchant"] is None: payee = t["description"] else: payee = t["merchant"]["name"] memo = t["description"] try: memo = "Tab: {}".format(t["tab"]["name"]) except KeyError: pass memo += "\n{local_amount} {local_currency}".format(**t) notes = t["notes"] if outformat == "csv": print('{date:%Y-%m-%d},{amount},"{payee}","{description}","{notes}"'.format(date=date, payee=payee, amount=amount, **t)) elif outformat == "qif": print("D{:%Y-%m-%d}".format(date)) print("T{}".format(amount)) print("P{}".format(payee)) print("M{}".format(memo)) print("#{}".format(t['id'])) print("^") cnt += 1