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__