Skip to content

Instantly share code, notes, and snippets.

@chadwhitacre
Last active May 11, 2018 17:06
Show Gist options
  • Save chadwhitacre/4ba8e8dd6e3d66896b6d3e482852b065 to your computer and use it in GitHub Desktop.
Save chadwhitacre/4ba8e8dd6e3d66896b6d3e482852b065 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import csv
import datetime
import json
import re
import sys
from decimal import Decimal as D
from collections import defaultdict
ZERO = D('0.00')
DAY = datetime.timedelta(days=1)
gratipay = json.load(open('gratipay.json'))
liberapay = json.load(open('liberapay.json'))
good_rate = re.compile(r'\d+\.\d+')
euro = {date: D(rate) for date, rate in csv.reader(open('DEXUSEU.csv')) if good_rate.match(rate)}
merged = defaultdict(dict)
Datetime = lambda date: datetime.date(*map(int, date.split('-')))
week = lambda date: Datetime(date) - datetime.timedelta(days=Datetime(date).weekday())
def find_rate(date):
if date in euro:
return euro[date]
return find_rate((Datetime(date) + DAY).strftime('%Y-%m-%d'))
for payday in gratipay:
usd = D(payday['volume'])
rate = find_rate(payday['date'])
eur = round(usd / rate, 2)
merged[week(payday['date'])]['gratipay'] = eur
for payday in liberapay:
volume = payday.get('volume', payday.get('transfer_volume', {}).get('amount'))
merged[week(payday['date'])]['liberapay'] = D(volume)
out = csv.writer(sys.stdout)
out.writerow(['week', 'gratipay', 'liberapay'])
for date, vals in sorted(merged.items()):
gratipay = vals.get('gratipay', 0)
liberapay = vals.get('liberapay', 0)
out.writerow([date, gratipay, liberapay])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment