diff --git a/render.py b/render.py
index f226adb..cacd90d 100755
--- a/render.py
+++ b/render.py
@@ -33,7 +33,7 @@ def get_debts():
debts.append((user, val))
return debts
-def render_template(path, week=None):
+def render_template(path, week=None, **kwargs):
with open('out/report.yml') as r:
report = yaml.safe_load(r)
@@ -93,7 +93,7 @@ def render_template(path, week=None):
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)
+ debts=debts, **kwargs)
if __name__ == '__main__':
if len(sys.argv) < 2:
diff --git a/templates/email.txt b/templates/email.txt
index d98a6b5..aaeff73 100644
--- a/templates/email.txt
+++ b/templates/email.txt
@@ -2,6 +2,7 @@ Subject: IRON BLOGGER results for the week beginning ${week_start.strftime("%F")
To: iron-blogger@mit.edu
SLACKERS: ${", ".join(sorted([u.username for u in lame]))}
+PUNTED for balance greater than $30: ${", ".join(sorted(punt))}
People who posted:
% for u in sorted(good, key=lambda u:u.username):
diff --git a/templates/week.tmpl b/templates/week.tmpl
index d4ca365..0672bf4 100644
--- a/templates/week.tmpl
+++ b/templates/week.tmpl
@@ -20,6 +20,15 @@ Results for week beginning ${week_start.strftime("%F")}
% endfor
+% if punt:
+
People punted for excessive outstanding balances:
+
+% for u in sorted(punt):
+- ${u}
+% endfor
+
+% endif
+
% if skip:
People who have not yet started
diff --git a/weekly-update.py b/weekly-update.py
index b87e37e..4aa749c 100755
--- a/weekly-update.py
+++ b/weekly-update.py
@@ -4,24 +4,22 @@ import os
import sys
import xmlrpclib
import subprocess
+import datetime
+import yaml
XMLRPC_ENDPOINT = 'http://iron-blogger.mit.edu/xmlrpc.php'
USER = 'nelhage'
BLOG_ID = 1
+dry_run = False
+
args = sys.argv[1:]
if args[0] == '-n':
dry_run = True
args = args[1:]
date = args[0]
-
-try:
- subprocess.call(['stty', '-echo'])
- passwd = raw_input("Password for %s: " % (USER,))
- print
-finally:
- subprocess.call(['stty', 'echo'])
+today = str(datetime.date.today())
with open('ledger', 'a') as f:
f.write("\n")
@@ -30,20 +28,41 @@ with open('ledger', 'a') as f:
subprocess.check_call(["git", "commit", "ledger",
"-m", "Update for %s" % (date,)])
-text = render.render_template('templates/week.tmpl', date)
+debts = render.get_debts()
+punt = []
-lines = text.split("\n")
-title = lines[0]
-body = "\n".join(lines[1:])
+with open('ledger', 'a') as f:
+ f.write("\n")
+ for (user, debt) in debts:
+ if debt < 30: continue
+ punt.append(user)
+ f.write("""\
+%(today)s Punt
+ Pool:Owed:%(user)s $-%(debt)s
+ User:%(user)s
+""" % {'user': user, 'debt': debt, 'today': today})
-page = dict(title = title,
- description = body)
if not dry_run:
+ text = render.render_template('templates/week.tmpl', date, punt=punt)
+
+ lines = text.split("\n")
+ title = lines[0]
+ body = "\n".join(lines[1:])
+
+ page = dict(title = title, description = body)
+
+ try:
+ subprocess.call(['stty', '-echo'])
+ passwd = raw_input("Password for %s: " % (USER,))
+ print
+ finally:
+ subprocess.call(['stty', 'echo'])
+
x = xmlrpclib.ServerProxy(XMLRPC_ENDPOINT)
x.metaWeblog.newPost(BLOG_ID, USER, passwd, page, True)
-email = render.render_template('templates/email.txt', date)
+email = render.render_template('templates/email.txt', date, punt=punt)
if dry_run:
print email
@@ -51,3 +70,15 @@ else:
p = subprocess.Popen(['mutt', '-H', '/dev/stdin'],
stdin=subprocess.PIPE)
p.communicate(email)
+
+if punt:
+ with open('bloggers.yml') as b:
+ bloggers = yaml.safe_load(b)
+ for p in punt:
+ if 'end' not in bloggers[p]:
+ bloggers[p]['end'] = today
+ with open('bloggers.yml','w') as b:
+ yaml.safe_dump(bloggers, b)
+
+ subprocess.check_call(["git", "commit", "ledger", "bloggers.yml",
+ "-m", "Punts for %s" % (today,)])