-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadd-donations.py
executable file
·96 lines (74 loc) · 2.64 KB
/
add-donations.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python
import mysql.connector
import csv
import sys
new_donations_csv = csv.reader(open(sys.argv[1]), dialect='excel-tab')
# expected format: Name, Typ, Strasse, Plz, Stadt, Partei, Betrag
head = new_donations_csv.next()
expected = 'name,typ,strasse,plz,stadt,partei,betrag,jahr'.split(',')
cols = {}
for col in expected:
for i in range(len(head)):
if col == head[i].lower():
cols[col] = i
break
if col not in cols:
print "Error: column '" + col + "' not found in csv file.\n"
exit(-1)
new_donations = []
for row in new_donations_csv:
if len(row) > 1:
donation = {}
for col in cols:
donation[col] = row[cols[col]]
donation['betrag'] = float(donation['betrag'])
donation['jahr'] = int(donation['jahr'])
new_donations.append(donation)
print len(new_donations), 'new donations'
# connect to mysql database
conn = mysql.connector.connect()
conn.connect(database='parteispenden10', user='root')
cur = conn.cursor()
def add_donation(donation, donor_id, donor_rev):
cur = conn.cursor()
values = (donor_id, donor_rev, donation['partei'], donation['jahr'], donation['betrag'])
cur.execute('INSERT INTO spenden (spender_id, spender_rev, partei_id, jahr, betrag_euro) VALUES (%s, %s, %s, %s, %s)', values)
conn.commit()
def add_donor(donor):
cur = conn.cursor()
values = (donor['name'], donor['strasse'], donor['plz'], donor['stadt'], donor['typ'])
cur.execute('INSERT INTO spender (name, strasse, plz, stadt, typ) VALUES (%s, %s, %s, %s, %s)', values)
conn.commit()
cur.execute('SELECT LAST_INSERT_ID();')
last_id = cur.fetchone()[0]
return last_id
for donation in new_donations:
q = (donation['name'], donation['stadt'])
cur.execute('SELECT id, revision FROM spender WHERE name = %s and stadt = %s LIMIT 1', q)
res = cur.fetchone()
if res is None:
donor_id = add_donor(donation)
donor_rev = 0
else:
donor_id, donor_rev = res
add_donation(donation, donor_id, donor_rev)
exit()
token_count = {}
for donation in new_donations:
tokens = donation['name'].lower().split(' ')
for token in tokens:
if token not in token_count:
token_count[token] = 0
token_count[token] += 1
# read known donor tokens
cur.execute('SELECT spender_id, token FROM spender_token')
known_token = []
for spender_id, token in cur:
token = token.lower()
if token not in token_count:
token_count[token] = 0
token_count[token] += 1
tmp = []
for token in token_count:
tmp.append((token, token_count[token]))
tmp = sorted(tmp, key=lambda r: r[1])