--- /dev/null
+#!/usr/bin/python
+## -*- coding: utf-8 -*-
+
+import os.path
+import datetime
+import subprocess
+
+HERE = os.path.dirname(__file__)
+START = datetime.datetime(2011, 10, 24, 6)
+
+XMLRPC_ENDPOINT = 'http://iron-blogger.mako.cc/xmlrpc.php'
+USER = 'mako'
+BLOG_ID = 1
+PARTICIPANTS_PAGE_ID = 12
+
+FINE_SIZE = 5
+CURRENCY = "$"
+
+# check the version of ledger to find out which commands to use
+if subprocess.check_output(['ledger', '--version'])[7] == 3:
+ BALANCE_CMD = ['ledger', '-f', os.path.join(HERE,'ledger'),
+ '--no-color', '-n', 'balance']
+
+ DEBTS_CMD = ['ledger', '-f', os.path.join(HERE, 'ledger'),
+ '--flat', '--no-total', '--no-color',
+ 'balance', 'Pool:Owed:']
+
+else:
+ BALANCE_CMD = ['ledger', '-f', os.path.join(HERE, 'ledger'),
+ '-n', 'balance']
+ DEBTS_CMD = ['ledger', '-f', os.path.join(HERE, 'ledger'),
+ '-n', 'balance', 'Pool:Owed:']
+
import os
import os.path
import subprocess
+import re
from mako.template import Template
-START = datetime.datetime(2011, 10, 24, 6)
-HERE = os.path.dirname(__file__)
+from config import *
def get_balance(acct):
- p = subprocess.Popen(['ledger', '-f', os.path.join(HERE,'ledger'),
- '-n', 'balance', acct],
+ print acct
+ balance_cmd_tmp = BALANCE_CMD
+ balance_cmd_tmp.append(acct)
+ p = subprocess.Popen(balance_cmd_tmp,
stdout=subprocess.PIPE)
(out, _) = p.communicate()
- return float(out.split()[0][1:])
+ return float(re.sub(r'\s*(\d+)\s+.*', r'\1', out))
def get_debts():
- p = subprocess.Popen(['ledger', '-f', os.path.join(HERE, 'ledger'),
- '-n', 'balance', 'Pool:Owed:'],
+ p = subprocess.Popen(DEBTS_CMD,
stdout=subprocess.PIPE)
(out, _) = p.communicate()
debts = []
if not line: continue
(val, acct) = line.split()
user = acct[len("Pool:Owed:"):]
- val = float(val[len("$"):])
+ val = float(re.sub(r'(\D)?(\d+)$', r'\2', val))
debts.append((user, val))
return debts
punted.sort(key=user_key)
for u in userlist:
- user_start = parse(u.start, default=START)
+ user_start = datetime.datetime(*(u.start.timetuple()[:6]))
if u.end and parse(u.end, default=START) <= week_start:
continue
-
+
if should_skip(u.skip, week):
pass
elif user_start > week_start:
debts = get_debts()
- return Template(filename=path, output_encoding='utf-8').render(
+ return Template(filename=path, input_encoding='utf-8',
+ output_encoding='utf-8',
+ default_filters=['decode.utf8']).render(
week=week, week_start=week_start,week_end=week_end,
good=good, lame=lame, skip=skip, userlist=userlist,
pool=get_balance('Pool'), paid=get_balance('Pool:Paid'),
- debts=debts, punted=punted, **kwargs)
+ debts=debts, punted=punted, currency=CURRENCY, fine=FINE_SIZE,
+ **kwargs)
if __name__ == '__main__':
if len(sys.argv) < 2:
SLACKERS: ${", ".join(sorted([u.username for u in lame]))}
% if punt:
-PUNTED for balance ≥$30: ${", ".join(sorted(punt))}
+PUNTED for balance ≥${currency}${fine * 6}: ${", ".join(sorted(punt))}
% endif
People who posted:
% endif
Beer pool:
-This week: $${5 * len(lame)}.00
-Total: $${pool}
-Paid: $${paid}
+This week: ${currency}${fine * len(lame)}.00
+Total: ${currency}${pool}
+Paid: ${currency}${paid}
Individual debts:
% for (u, v) in sorted(debts, key=lambda p:p[1], reverse=True):
-${"%20s $%d" % (u, v)}
+ ${u} ${currency}${v}
% endfor
+% if punted:
-PREVIOUSLY PUNTED (pay $30 balance to return):
+PREVIOUSLY PUNTED (pay ${currency}${fine * 6} balance to return):
% for (u) in sorted(punted, key=lambda p:p.username):
${"%20s (%s)" % (u.username, u.end)}
% endfor
+% endif
% for u in sorted(lame, key=lambda u:u.username):
${week_end.strftime("%F")} Week ${week}
- User:${u.username} $-5
+ User:${u.username} -${fine}
Pool:Owed:${u.username}
% endfor
<h2>Beer pool:</h2>
<table>
- <tr> <td> This week: </td> <td> $${5 * len(lame)} </td> </tr>
- <tr> <td> Total: </td> <td> $${pool} </td> </tr>
- <tr> <td> Paid: </td> <td> $${paid} </td> </tr>
+ <tr> <td> This week: </td> <td> ${currency}${fine * len(lame)} </td> </tr>
+ <tr> <td> Total: </td> <td> ${currency}${pool} </td> </tr>
+ <tr> <td> Paid: </td> <td> ${currency}${paid} </td> </tr>
</table>
<h2>Debts:</h2>
<tr>\
% endif
<% i += 1 %>\
-<td class="user">${u}</td> <td class="money">$${v}</td>\
+<td class="user">${u}</td> <td class="money">${currency}${v}</td>\
% if i % 3 == 0:
</tr>
%endif
% for (u) in sorted(punted, key=lambda p:p.username):
<li>${u.username} (${u.end})</li>
% endfor
-</ul>
\ No newline at end of file
+</ul>
import xmlrpclib
import subprocess
-
-XMLRPC_ENDPOINT = 'http://iron-blogger.mako.cc/xmlrpc.php'
-USER = 'mako'
-BLOG_ID = 1
-PAGE_ID = 12
+import config
try:
subprocess.call(['stty', '-echo'])
subprocess.call(['stty', 'echo'])
x = xmlrpclib.ServerProxy(XMLRPC_ENDPOINT)
-page = x.wp.getPage(BLOG_ID, PAGE_ID, USER, passwd)
+page = x.wp.getPage(BLOG_ID, PARTICIPANTS_PAGE_ID, USER, passwd)
text = render.render_template('templates/users.tmpl')
page['description'] = text
import datetime
import yaml
-XMLRPC_ENDPOINT = 'http://iron-blogger.mako.cc/xmlrpc.php'
-USER = 'mako'
-BLOG_ID = 1
+from config import *
dry_run = False
with open('ledger', 'a') as f:
f.write("\n")
for (user, debt) in debts:
- if debt < 30: continue
+ if debt < (FINE_SIZE * 6): continue
punt.append(user)
f.write("""\
%(date)s Punt
- Pool:Owed:%(user)s $-%(debt)s
+ Pool:Owed:%(user)s -%(debt)s
User:%(user)s
""" % {'user': user, 'debt': debt, 'date': date})