#!/usr/bin/env python
"""
    Site-scraping script
"""

nameList = []

import urllib
import re
import sys

def help():
    print "Usage:  python case-count.py [-s|<qa account>]"

def parse_subscriptions(name, test_subs):
    output = ""
    if test_subs.has_key(name):
        output += "\nTest Case Subscriptions for %s:\n\n" % (name)
        for test_case in test_subs[name]:
                output += "    %s\n" % (test_case)
    else:
        output += "    None\n"

    return output

#RED = "#E47A7A"
#ORANGE = "#FFDB80"
#GREEN = "#CCFFCC"

wiki = urllib.urlopen("https://wiki.canonical.com/DistroTeam/HardyIsoTesting?action=raw")
content = wiki.read()
wiki.close()

reg_exp = "\|\|.*(\[.*?\]).*\|\|.*<(\S*)>.*\|\|(.*)\|\|(.*)\|\|(.*)\|\|"
metric = re.findall(reg_exp, content)

for row in metric:
    nameList.append(row[2].strip())

sock = urllib.urlopen("http://iso.qa.ubuntu.com/qatracker/subscriptions")
htmlSource = sock.read()
sock.close()

reg_exp = "<a href=\"/qatracker/build.*?>(.*?)</a>(.*?)</table>"
subscriptions = re.findall(reg_exp, htmlSource)

test_subscriptions = {}

for section in subscriptions:
    reg_exp = "<tr><td.*?>(.*?)</td><td.*?>(.*?)</td></tr>"
    flavors = re.findall(reg_exp, section[1])
    for flavor in flavors:
        subscribers = flavor[1].replace("<b>", "")
        subscribers = subscribers.replace("</b>", "")
        subscribers = subscribers.split(", ")
        for name in subscribers:
            if not test_subscriptions.has_key(name):
                test_subscriptions[name] = []
            test_subscriptions[name].append(section[0] + ": " + flavor[0])

index = 0
subs_output = ""
wiki_output = ""

if len(sys.argv) > 1 and sys.argv[1] != "-s":
    subs_output += parse_subscriptions(sys.argv[1], test_subscriptions)
    print subs_output
    sys.exit(1)

for name in nameList:
    subs_output += parse_subscriptions(name, test_subscriptions)
    caseCount = htmlSource.count(name)
    color = metric[index][1]

    if metric[index][3].strip():
        archs = metric[index][3].strip()
    else:
        archs = "i386"

    wiki_output += "|| %s ||<%s> %d || %s || %s || %s ||\n" % (metric[index][0], color, caseCount, name, archs,metric[index][4].strip())
    index += 1

if len(sys.argv) == 1:
    print wiki_output
elif sys.argv[1] == "-s":
    print subs_output
else:
    print help()
