#!/bin/python3

from sys import argv
from contextlib import suppress
import json
import bs4

def usage():
	print("Incorrect invokation. Usage:")
	print("\ลง" + argv[0] + " [FILE]")
	exit(1)

if len(argv) == 1:
	usage()

with open(argv[1]) as f:
	b = bs4.BeautifulSoup(f.read(), 'html.parser')
entries = b.find_all(class_="m-grantsDatabase__item")

class donation:
	pass

def assignAttempt(o, attr, cmd):
	buf = ""
	with suppress(AttributeError): buf = eval(cmd)
	setattr(o, attr, buf)
		
donations = []
for i in entries:
	d = donation()
	d.to = i.find(class_="a-grantsDatabase__title").get_text()
	d.date = i.find(class_="a-grantsDatabase__cell--1").get_text()
	d.amount = i.find(class_="a-grantsDatabase__cell--2").get_text()
	d.desc = i.find(class_="a-grantsDatabase__cell--6").find(class_="a-grantsDatabase__text").get_text()
	assignAttempt(d, 'theme', 'i.find(string="Theme").parent.next_sibling.next_sibling.get_text()')
	assignAttempt(d, 'ref_prog', 'i.find(string="Referring Program").parent.next_sibling.next_sibling.get_text()')
	assignAttempt(d, 'term', 'i.find(string="Term").parent.next_sibling.next_sibling.get_text()')
	assignAttempt(d, 'region', 'i.find(string="Region").parent.next_sibling.next_sibling.get_text()')
	assignAttempt(d, 'funder', 'i.find(string="Funder").parent.next_sibling.next_sibling.get_text()')
	donations.append(d)



for i in donations:
	for h in vars(i):
		exec('i.{0} = i.{0}.strip(" \\t\\n")'.format(h))

print(json.dumps([i.__dict__ for i in donations]))