added a new configuration file and changed code/templates to use it
authorBenjamin Mako Hill <mako@atdot.cc>
Mon, 13 Aug 2012 21:07:31 +0000 (17:07 -0400)
committerBenjamin Mako Hill <mako@atdot.cc>
Mon, 13 Aug 2012 21:10:56 +0000 (17:10 -0400)
config.py [new file with mode: 0644]
render.py
templates/email.txt
templates/ledger
templates/week.tmpl
update-participants.py
weekly-update.py

diff --git a/config.py b/config.py
new file mode 100644 (file)
index 0000000..d112ea5
--- /dev/null
+++ b/config.py
@@ -0,0 +1,33 @@
+#!/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:']
+    
index 9e1fbdc48b422609ebd4c574decf5fecd046a7ce..58a1fc4371ed83333df3577138c387f1786439d7 100755 (executable)
--- a/render.py
+++ b/render.py
@@ -7,21 +7,22 @@ import sys
 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 = []
@@ -29,7 +30,7 @@ def get_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
 
@@ -100,10 +101,10 @@ def render_template(path, week=None, **kwargs):
     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:
@@ -115,11 +116,14 @@ def render_template(path, week=None, **kwargs):
 
     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:
index 667eaef7a86da25b45cb320dfb46a2a3a522bc5d..5f7891d7ee0186fd15bf67a455f018c4930c426d 100644 (file)
@@ -4,7 +4,7 @@ To: iron-blogger@mako.cc
 
 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:
@@ -23,16 +23,18 @@ People who have not yet started:
 % 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
index 022477b1e42ddd6b9090b0d50063224a8b3c93ad..3478d8b44874f2c9991dc8bc946939cc39a3bc35 100644 (file)
@@ -1,5 +1,5 @@
 % 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
index 4df9ca6756bf7b330418483fb017d5d5bb3219ad..dee7ee47b2d699114e3f8c9e040083666bfa60da 100644 (file)
@@ -40,9 +40,9 @@ Results for week beginning ${week_start.strftime("%F")}
 
 <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>
@@ -53,7 +53,7 @@ Results for week beginning ${week_start.strftime("%F")}
 <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
@@ -68,4 +68,4 @@ Results for week beginning ${week_start.strftime("%F")}
 % 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>
index fa65ccc82e342f223e4af3040426c4e6cee6e070..29b002c437ec87b485e163a8fe9e36f75a5edf83 100755 (executable)
@@ -6,11 +6,7 @@ import sys
 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'])
@@ -20,7 +16,7 @@ finally:
     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
index 7a44dffe36cd2115147348f4ef159d177b51e3ec..8b60e527541e4e2dd9d5a3462491d57a6038db87 100755 (executable)
@@ -7,9 +7,7 @@ import subprocess
 import datetime
 import yaml
 
-XMLRPC_ENDPOINT = 'http://iron-blogger.mako.cc/xmlrpc.php'
-USER            = 'mako'
-BLOG_ID         = 1
+from config import *
 
 dry_run = False
 
@@ -34,11 +32,11 @@ punt = []
 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})
 

Benjamin Mako Hill || Want to submit a patch?