Revision: 3829
Author: pekka.klarck
Date: Mon Aug 16 04:44:20 2010
Log: Added support for creating task board cards, and, as a prequisite, extracted common get_issues method. Updating docs todo next.
http://code.google.com/p/robotframework/source/detail?r=3829

Modified:
 /wiki/tools/get_issues.py

=======================================
--- /wiki/tools/get_issues.py   Wed May 12 00:55:30 2010
+++ /wiki/tools/get_issues.py   Mon Aug 16 04:44:20 2010
@@ -36,11 +36,54 @@
 import csv
 from urllib2 import urlopen
 from string import Template
+from collections import namedtuple


+Issue = namedtuple('Issue', 'id type priority summary')
 URL = Template('http://code.google.com/p/${project}/issues/csv?'
                'sort=priority+type&colspec=ID%20Type%20Priority%20Summary'
                '&q=target%3A${version}&can=1')
+HEADER = """<head>
+<style type="text/css">
+.issue {
+  float: left;
+  border: 1px solid black;
+  width: 12em;
+  height: 9em;
+  padding: 0.5em;
+  margin: 0.1em;
+}
+.container {
+  position: relative;
+}
+.id {
+  position: absolute;
+  top: 0em;
+  left: 0em;
+  font-size: 2.2em;
+}
+.type {
+  position: absolute;
+  top: 1.2em;
+  right: 0em;
+}
+.priority {
+  position: absolute;
+  top: 0em;
+  right: 0em;
+}
+.summary {
+  position: absolute;
+  top: 4em;
+  left: 0em;
+  right: 0em;
+  font-size: 0.8em;
+}
+</style>
+</head>
+<body>
+"""
+

 def get_issues(project, version, label=None):
     project = project.lower()
@@ -48,25 +91,41 @@
         project = 'robotframework-%s' % project
     url = URL.substitute(locals())
     reader = csv.reader(urlopen(url))
-    total_issues = 0
     for row in reader:
-        if not row or row[1] == 'Task':
+        if reader.line_num == 1 or not row:
             continue
         if label and label not in row[4]:
             continue
-        row = row[:4]
-        if reader.line_num == 1:
-            row = [ '*%s*' % cell for cell in row ]
-        else:
-            row[0] = 'Issue %s' % row[0]
-            total_issues += 1
-        print '|| %s ||' % ' || '.join(row)
-    print '\nAltogether %d issues.\n' % total_issues
+        yield Issue(*row[:4])


+def release_notes(project, version, label=None):
+    print '|| ID || Type || Priority || Summary ||'
+    count = 0
+    for issue in get_issues(project, version, label):
+        if issue.type == 'Task':
+            continue
+        print '|| Issue %s || %s || %s || %s ||' % issue
+        count += 1
+    print '\nAltogether %d issues.\n' % count
+
+
+def task_board(project, version):
+    print HEADER
+    for issue in get_issues(project, version):
+        print '<div class="issue"><div class="container">'
+        print '  <div class="id">%s</div>' % issue.id
+        print '  <div class="type">%s</div>' % issue.type
+        print '  <div class="priority">%s</div>' % issue.priority
+        print '  <div class="summary">%s</div>' % issue.summary
+        print '</div></div>'
+    print '</body>\n</html>\n'
+
+
 if __name__ == '__main__':
-    if len(sys.argv) in [3, 4]:
-        get_issues(*sys.argv[1:])
-    else:
+    programs = {'notes': release_notes, 'board': task_board}
+    try:
+        programs[sys.argv[1]](*sys.argv[2:])
+    except (KeyError, IndexError):
         print __doc__

Reply via email to