import urllib

def norm(url):
    if not url.endswith('/'):
        return url + '/'

def get_trac_feed(trac_url):
    timeline_offset = 'timeline?milestone=on&ticket=on&changeset=on&wiki=on&max=50&daysback=90&format=rss'
    tickets_offset = 'report/1?format=rss'
    timeline = urllib.basejoin(trac_url, timeline_offset)
    tickets = urllib.basejoin(trac_url, tickets_offset)
    return [timeline, tickets]

def trac_tickets_csv(trac_url):
    offset = 'report/1?format=csv'
    url = urllib.basejoin(trac_url, offset)
    return url

projects = [
        'http://knowledgeforge.net/microfacts/trac/',
        'http://knowledgeforge.net/ckan/trac/',
        'http://knowledgeforge.net/kforge/trac/',
        'http://knowledgeforge.net/econ/trac/',
        'http://knowledgeforge.net/shakespeare/trac/',
        ]

timelines = []
tickets = []
for p in projects:
    tl, tckt = get_trac_feed(p)
    tickets.append(tckt)
    timelines.append(tl)

# print timelines
# print tickets

def main():
    import feedparser
    d = feedparser.parse(tickets[0])
    print d.feed.title
    print d.entries[0].title
    print d.entries[0].keys()

def parse_tickets(ticket_csv):
    import csv
    from StringIO import StringIO
    fo = StringIO(ticket_csv)
    reader = csv.reader(fo)
    attr_names = reader.next()
    print attr_names
    results = []
    for row in reader:
        tckt = {}
        for ii in range(len(row)):
            tckt[attr_names[ii]] = row[ii]
        results.append(tckt)
    return results

def get_tickets(project):
    url = trac_tickets_csv(project)
    tcsv = urllib.urlopen(url).read()
    tckts = parse_tickets(tcsv)
    return tckts

if __name__ == '__main__':
    # main()
    p2 = projects[0:2] + projects[2:3]
    # p = projects[0]
    # tckts = get_tickets(p)
    tckts = []
    print p2
    for p in p2:
        tckts  += get_tickets(p)

    for tckt in tckts:
        if int(tckt['__color__']) <= 2: 
            print tckt['summary'], tckt['__color__']



