#!/usr/bin/python
# Copyright 2007-2008  Canonical, Ltd
# Author: Brian Murray <brian@ubuntu.com>
# License: GPLv2
# ---------------------------------------
# Reads data from the -changes csv file and presents it in a weak html table 

import csv
import sys

sourcepackage = sys.argv[1]
sourcepackagechanges = sys.argv[1] + '/' + sys.argv[1] + '-changes.csv' 

try:
    reader = csv.reader(open(sourcepackagechanges, "rb"))
except IOError:
    print '''%s data file doesn't exist''' % sourcepackagechanges
reader = csv.reader(open('%s' % sourcepackagechanges, "rb"))
# name: column - base 0
statinfo = {
    'total': { 'title':'Total', 'column':1 },
    'new': { 'title':'New', 'column':2 },
    'incomplete': { 'title':'Incomplete', 'column':3 },
    'confirmed': { 'title':'Confirmed', 'column':4 },
    'triaged': { 'title':'Triaged', 'column':5 },
    'inprogress': { 'title':'In Progress', 'column':6 },
    'fixcommitted': { 'title':'Fix Committed', 'column':7 },
    'fixreleased': { 'title':'Fix Released', 'column':8 },
    'invalid': { 'title':'Invalid', 'column':9 },
    'wontfix': { 'title':'''Won't Fix''', 'column':10 },
#    'undecided': { 'title':'Undecided', 'column':12 },
#    'wishlist': { 'title':'Wishlist', 'column':13 },
#    'low': { 'title':'Low', 'column':14 },
#    'medium': { 'title':'Medium', 'column':15 },
#    'high': { 'title':'High', 'column':16 },
#    'critical': { 'title':'Critical', 'column':17 },
            }

statuses = [ 'total', 'Closed', 'new', 'incomplete', 'confirmed', 'triaged', 'inprogress', 'fixcommitted', 'fixreleased', 'invalid', 'wontfix' ]
# length of time in days: number of rows from end where -1 is the last row
periods = { 1: '-25',
            7: '-169',
            30: '-721'
          }
datafile = open('%s/%s-changes.html' % (sourcepackage, sourcepackage), 'w')
datafile.write("<html>\n<body>\n")
datafile.write("<h1>Changes in bug quantities for %s</h1>\n" % sourcepackage)
datafile.write("<table border=1>\n")
datafile.write("<b><tr><th>Period</th>")
for status in statuses:
    if status == "Closed":
        datafile.write("<th>Closed</th>")
    else:
        datafile.write("<th>%s</th>" % statinfo[status]['title'])
datafile.write("</tr></b>\n")
for row in reader:
    if row[0].startswith('1'):
        datafile.write("<td>1 day</td>")
        for status in statuses:
            if status == "Closed":
                try:
                    value = str(int(row[8]) + int(row[9]) + int(row[10])) 
                except ValueError:
                    value = "-"
                    print "Insufficient data for %s" % sourcepackage
            else:
                column = statinfo[status]['column']
                value = row[column]
            if value.startswith('0') or value.startswith('-'):
                datafile.write("<td>%s</td>" % value)
                continue
            else:
                datafile.write("<td>+%s</td>" % value)
        datafile.write("</tr>\n")
    if row[0].startswith('7'):
        datafile.write("<td>7 days</td>")
        for status in statuses:
            if status == "Closed":
                try:
                    value = str(int(row[8]) + int(row[9]) + int(row[10])) 
                except ValueError:
                    value = "-"
                    print "Insufficient data for %s" % sourcepackage
            else:
                column = statinfo[status]['column']
                value = row[column]
            if value.startswith('0') or value.startswith('-'):
                datafile.write("<td>%s</td>" % value)
                continue
            else:
                datafile.write("<td>+%s</td>" % value)
        datafile.write("</tr>\n")
    if row[0].startswith('30'):
        datafile.write("<td>30 days</td>")
        for status in statuses:
            if status == "Closed":
                try:
                    value = str(int(row[8]) + int(row[9]) + int(row[10])) 
                except ValueError:
                    value = "-"
                    print "Insufficient data for %s" % sourcepackage
            else:
                column = statinfo[status]['column']
                value = row[column]
            if value.startswith('0') or value.startswith('-'):
                datafile.write("<td>%s</td>" % value)
                continue
            else:
                datafile.write("<td>+%s</td>" % value)
        datafile.write("</tr>\n")
datafile.write("</table>\n")
datafile.write("</body>\n")
datafile.write("</html>\n")
datafile.close()
