status-report-scripts pyGetReviewByFlags,1.4,1.5
Toshio Ernie Kuratomi (toshio)
fedora-extras-commits at redhat.com
Thu May 24 18:17:56 UTC 2007
Author: toshio
Update of /cvs/fedora/status-report-scripts
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv17800
Modified Files:
pyGetReviewByFlags
Log Message:
* Add a patch from Jason Tibbits that includes the last change time for bugs
in the output.
* Use a temporary directory to hold the new updates so we don't destroy the
working files while we're creating new ones.
* Pull the command line parser into its own function.
* Have flag loop work by reading data from a hash instead of having an if-then
to process the information.
* Move printing of the footer to its own function.
* Change all tabs to 8 spaces.
Index: pyGetReviewByFlags
===================================================================
RCS file: /cvs/fedora/status-report-scripts/pyGetReviewByFlags,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- pyGetReviewByFlags 20 Apr 2007 15:30:27 -0000 1.4
+++ pyGetReviewByFlags 24 May 2007 18:17:53 -0000 1.5
@@ -6,23 +6,38 @@
from optparse import OptionParser
import xmlrpclib
import datetime
+import tempfile
+import glob
url = 'http://bugzilla.redhat.com/bugzilla/xmlrpc.cgi'
-usage = "usage: %prog [options] -d <dest_dir>"
-parser = OptionParser(usage)
-parser.add_option("-d", "--destination", dest="dirname",
- help="destination directory")
-parser.add_option("-f", "--frequency", dest="frequency",
- help="update frequency", default="60")
-(options, args) = parser.parse_args()
-tst = str(options.dirname)
-if str(options.dirname) == 'None':
- parser.error("Please specify destination directory")
-if not os.path.isdir(options.dirname):
- parser.error("Please specify an existing destination directory")
+flagData = {
+ # 'FLAG' : (baseFlagFilename, openMsg, closeMsg),
+ '+': ('ACCEPT.html', "Accepted, but still open, tickets",
+ "Accepted tickets"),
+ '-': ('REJECT.html', "Rejected, but still open, tickets",
+ "Rejected tickets"),
+ '?': ('REVIEW.html', "Tickets being reviewed",
+ "Tickets being reviewed, but closed (should not happen)")
+ }
+
+def parse_commandline():
+ usage = "usage: %prog [options] -d <dest_dir>"
+ parser = OptionParser(usage)
+ parser.add_option("-d", "--destination", dest="dirname",
+ help="destination directory")
+ parser.add_option("-f", "--frequency", dest="frequency",
+ help="update frequency", default="60")
+ (options, args) = parser.parse_args()
+ tst = str(options.dirname)
+ if str(options.dirname) == 'None':
+ parser.error("Please specify destination directory")
+ if not os.path.isdir(options.dirname):
+ parser.error("Please specify an existing destination directory")
-def printHeader(f):
+ return options
+
+def printHeader(f, frequency):
print >> f, """
<html>
<head>
@@ -46,7 +61,14 @@
It is updated every %s minutes</h1>
<div id="content_here">
<h1 style="background-color: #99f">Last Update: %s </h1>
-""" % (options.frequency, (datetime.datetime.today()))
+""" % (frequency, (datetime.datetime.today()))
+
+def printFooter(f):
+ print >> f, """
+ </div></div>
+ </body>
+ </html>
+ """
def runQuery(server, flag, f, openMsg, closeMsg):
querydata = {}
@@ -55,22 +77,27 @@
querydata['component'] = ['Package Review']
querydata['field0-0-0'] = 'flagtypes.name'
if flag == " ":
- querydata['bug_status'] = ["NEW", "ASSIGNED", "REOPENED", "NEEDINFO", "INVESTIGATE", "MODIFIED"]
- querydata['type0-0-0'] = 'notregexp';
- querydata['value0-0-0'] = 'fedora-review[-+?]'
+ querydata['bug_status'] = ["NEW", "ASSIGNED", "REOPENED", "NEEDINFO", "INVESTIGATE", "MODIFIED"]
+ querydata['type0-0-0'] = 'notregexp';
+ querydata['value0-0-0'] = 'fedora-review[-+?]'
else:
- querydata['bug_status'] = ["NEW", "VERIFIED", "ASSIGNED", "REOPENED", "CLOSED", "NEEDINFO_ENG", "NEEDINFO", "INVESTIGATE", "MODIFIED", "ON_DEV", "UNCONFIRMED", "QA_READY", "ON_QA", "FAILS_QA", "NEEDINFO_REPORTER", "RELEASE_PENDING", "POST"]
- querydata['type0-0-0'] = 'equals'
- querydata['value0-0-0'] = "fedora-review" + flag
+ querydata['bug_status'] = ["NEW", "VERIFIED", "ASSIGNED", "REOPENED", "CLOSED", "NEEDINFO_ENG", "NEEDINFO", "INVESTIGATE", "MODIFIED", "ON_DEV", "UNCONFIRMED", "QA_READY", "ON_QA", "FAILS_QA", "NEEDINFO_REPORTER", "RELEASE_PENDING", "POST"]
+ querydata['type0-0-0'] = 'equals'
+ querydata['value0-0-0'] = "fedora-review" + flag
call = server.bugzilla.runQuery(querydata)
bugs = call['bugs']
closedCnt = 0
notClosedCnt = 0
+
+ for bug in bugs:
+ nosec = bug['changeddate'].rfind(':')
+ bug['changeddate'] = bug['changeddate'][0:nosec]
+
for e in bugs:
- if e['bug_status'] == "CLOSED":
- closedCnt += 1
- else:
- notClosedCnt += 1
+ if e['bug_status'] == "CLOSED":
+ closedCnt += 1
+ else:
+ notClosedCnt += 1
print >> f, """
<h1 style="background-color: #99f">%s<br/>
There are %d tickets in this category</h1>
@@ -80,6 +107,7 @@
<col class="bz_alias_column">
<col class="bz_assigned_to_column">
<col class="bz_bug_status_column">
+<col class="bz_bug_changeddate_column">
<col class="bz_resolution_column">
<col class="bz_short_short_desc_column">
</colgroup>
@@ -89,21 +117,22 @@
<td>Alias</td>
<td>Assignee</td>
<td>Status</td>
+<td>Last Change</td>
<td>Resolution</td>
<td>Summary</td>
</thead>
""" % (openMsg, notClosedCnt)
cnt = 0
for e in bugs:
- if e['bug_status'] == "CLOSED":
- continue
- cnt += 1
- if (cnt % 2) == 1:
- print >> f, '<tr class="bz_even bz_'
- else:
- print >> f, '<tr class="bz_odd bz_'
- print >> f, e['bug_status'], ' onMouseOver="bug_over(this, 0);">', "\n"
- print >> f, """
+ if e['bug_status'] == "CLOSED":
+ continue
+ cnt += 1
+ if (cnt % 2) == 1:
+ print >> f, '<tr class="bz_even bz_'
+ else:
+ print >> f, '<tr class="bz_odd bz_'
+ print >> f, e['bug_status'], ' onMouseOver="bug_over(this, 0);">', "\n"
+ print >> f, """
<td>
<a href="show_bug.cgi?id=%s">%s</a>
</td><td><nobr>
@@ -116,11 +145,13 @@
<span title="%s">%s</span>
</nobr></td><td><nobr>
<span title="%s">%s</span>
+</nobr></td><td><nobr>
+<span title="%s">%s</span>
</nobr></td></tr>
-""" % (e['bug_id'], e['bug_id'], e['alias'], e['alias'], e['assigned_to'], e['assigned_to'], e['bug_status'], e['bug_status'], e['resolution'], e['resolution'], e['short_desc'], e['short_desc'])
+""" % (e['bug_id'], e['bug_id'], e['alias'], e['alias'], e['assigned_to'], e['assigned_to'], e['bug_status'], e['bug_status'], e['changeddate'], e['changeddate'], e['resolution'], e['resolution'], e['short_desc'], e['short_desc'])
print >> f, "</table>\n"
if flag == " ":
- return
+ return
print >> f, """
<h1 style="background-color: #99f">%s<br/>
There are %d tickets in this category</h1>
@@ -130,6 +161,7 @@
<col class="bz_alias_column">
<col class="bz_assigned_to_column">
<col class="bz_bug_status_column">
+<col class="bz_changeddate_column">
<col class="bz_resolution_column">
<col class="bz_short_short_desc_column">
</colgroup>
@@ -139,21 +171,22 @@
<td>Alias</td>
<td>Assignee</td>
<td>Status</td>
+<td>Last Change</td>
<td>Resolution</td>
<td>Summary</td>
</thead>
""" % (closeMsg, closedCnt)
cnt = 0
for e in bugs:
- if e['bug_status'] != "CLOSED":
- continue
- cnt += 1
- if (cnt % 2) == 1:
- print >> f, '<tr class="bz_even bz_'
- else:
- print >> f, '<tr class="bz_odd bz_'
- print >> f, e['bug_status'], ' onMouseOver="bug_over(this, 0);">', "\n"
- print >> f, """
+ if e['bug_status'] != "CLOSED":
+ continue
+ cnt += 1
+ if (cnt % 2) == 1:
+ print >> f, '<tr class="bz_even bz_'
+ else:
+ print >> f, '<tr class="bz_odd bz_'
+ print >> f, e['bug_status'], ' onMouseOver="bug_over(this, 0);">', "\n"
+ print >> f, """
<td>
<a href="show_bug.cgi?id=%s">%s</a>
</td><td><nobr>
@@ -166,50 +199,47 @@
<span title="%s">%s</span>
</nobr></td><td><nobr>
<span title="%s">%s</span>
+</nobr></td><td><nobr>
+<span title="%s">%s</span>
</nobr></td></tr>
-""" % (e['bug_id'], e['bug_id'], e['alias'], e['alias'], e['assigned_to'], e['assigned_to'], e['bug_status'], e['bug_status'], e['resolution'], e['resolution'], e['short_desc'], e['short_desc'])
+""" % (e['bug_id'], e['bug_id'], e['alias'], e['alias'], e['assigned_to'], e['assigned_to'], e['bug_status'], e['bug_status'], e['changeddate'], e['changeddate'], e['resolution'], e['resolution'], e['short_desc'], e['short_desc'])
print >> f, "</table>\n"
-server = xmlrpclib.Server(url)
-fname = os.path.join(options.dirname, "NEW.html")
-try:
- f = open(fname, "w")
-except IOError, (err, strerr):
- print 'ERROR: %s: %s' % (strerr, fname)
- sys.exit(1)
-printHeader(f)
-runQuery(server, ' ', f, "Open ticket(s) with an empty flag", "")
-print >> f, """
- </div></div>
- </body>
-</html>
-"""
-f.close()
-
-for flag in ['+', '-', '?']:
- if flag == '+':
- openMsg = "Accepted, but still open, tickets"
- closeMsg = "Accepted tickets"
- fname = os.path.join(options.dirname, "ACCEPT.html")
- elif flag == '-':
- openMsg = "Rejected, but still open, tickets"
- closeMsg = "Rejected tickets"
- fname = os.path.join(options.dirname, "REJECT.html")
- else:
- openMsg = "Tickets being reviewed"
- closeMsg = "Tickets being reviewed, but closed (should not happen)"
- fname = os.path.join(options.dirname, "REVIEW.html")
+if __name__ == '__main__':
+ server = xmlrpclib.Server(url)
+ options = parse_commandline()
+ tmpdir = tempfile.mkdtemp(dir=options.dirname)
+ fname = os.path.join(tmpdir, "NEW.html")
try:
- f = open(fname, "w")
+ f = open(fname, "w")
except IOError, (err, strerr):
- print 'ERROR: %s: %s' % (strerr, fname)
- sys.exit(1)
- printHeader(f)
- runQuery(server, flag, f, openMsg, closeMsg)
+ print 'ERROR: %s: %s' % (strerr, fname)
+ sys.exit(1)
+ printHeader(f, options.frequency)
+ runQuery(server, ' ', f, "Open ticket(s) with an empty flag", "")
print >> f, """
- </div></div>
- </body>
-</html>
-"""
-sys.exit(0)
+ </div></div>
+ </body>
+ </html>
+ """
+ f.close()
+
+ for flag in flagData.keys():
+ try:
+ f = open(os.path.join(tmpdir, flagData[flag][0]), "w")
+ except IOError, (err, strerr):
+ print 'ERROR: %s: %s' % (strerr, flagData[flag][0])
+ sys.exit(1)
+ printHeader(f, options.frequency)
+ runQuery(server, flag, f, flagData[flag][1], flagData[flag][2])
+ printFooter(f)
+ f.close()
+
+ # Move the created files to their final destination
+ for filename in glob.glob(os.path.join(tmpdir, '*')):
+ newFilename = os.path.basename(filename)
+ os.rename(filename, os.path.join(options.dirname, newFilename))
+ os.rmdir(tmpdir)
+
+ sys.exit(0)
More information about the fedora-extras-commits
mailing list