AUTOPUNT
authorNelson Elhage <nelhage@ksplice.com>
Tue, 1 Jun 2010 00:54:47 +0000 (20:54 -0400)
committerNelson Elhage <nelhage@ksplice.com>
Tue, 1 Jun 2010 00:56:06 +0000 (20:56 -0400)
render.py
templates/email.txt
templates/week.tmpl
weekly-update.py

index f226adb906448fa945efda8ea05b7bd169f22073..cacd90da6360c8fe2b799eb21f4f81b05d6ce826 100755 (executable)
--- 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:
index d98a6b5b9e253c0061c7d389d22ef023b459fbef..aaeff73207bb205ab98e3cc6a15b5b1b5fb0abf1 100644 (file)
@@ -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):
index d4ca365e0d28544c708737ee8e14457cc866e579..0672bf4c5157555174fb9dd44bcd7833e77561af 100644 (file)
@@ -20,6 +20,15 @@ Results for week beginning ${week_start.strftime("%F")}
 % endfor
 </ul>
 
+% if punt:
+<h2>People punted for excessive outstanding balances:</h2>
+<ul>
+% for u in sorted(punt):
+<li class="user">${u}</li>
+% endfor
+</ul>
+% endif
+
 % if skip:
 <h2>People who have not yet started</h2>
 <ul>
index b87e37ef7e4453b04a8fc3cbc8c646b686c24802..4aa749c6156cf0d2cfae51df841b337028bb54d1 100755 (executable)
@@ -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,)])

Benjamin Mako Hill || Want to submit a patch?