X-Git-Url: http://andersk.mit.edu/gitweb/jira-zephyrbot.git/blobdiff_plain/278c5c286c9d3e4e8791d6f80596b4c48fa3e04d..HEAD:/jirabot.py diff --git a/jirabot.py b/jirabot.py index 6198303..5495e5a 100755 --- a/jirabot.py +++ b/jirabot.py @@ -1,13 +1,14 @@ #!/usr/bin/python -import cStringIO import calendar import feedparser import formatter +import htmlentitydefs import htmllib import mechanize import os import random import string +import StringIO import time import traceback import urlparse @@ -17,6 +18,19 @@ zephyr_sender = 'jira' zephyr_class = 'andersk-test' time_file = 'jirabot.time' +class UnicodeHTMLParser(htmllib.HTMLParser): + entitydefs = dict((k, unichr(v)) for (k, v) in htmlentitydefs.name2codepoint.items()) + + def convert_charref(self, name): + try: + n = int(name) + except ValueError: + return + return self.convert_codepoint(n) + + def convert_codepoint(self, codepoint): + return unichr(codepoint) + def jira_init(): b = mechanize.Browser() b.set_handle_robots(False) @@ -78,12 +92,11 @@ def parse_comment(e): url = urlparse.urlunsplit(urlparse.urlparse(e.id)[0:3] + (None,None)) issue = url.rsplit('/', 1)[1] - s = cStringIO.StringIO() - parser = htmllib.HTMLParser(formatter.AbstractFormatter(formatter.DumbWriter(s))) + s = StringIO.StringIO() + parser = UnicodeHTMLParser(formatter.AbstractFormatter(formatter.DumbWriter(s))) parser.feed(e.summary.rsplit('', 1)[0]) parser.close() - s.seek(0) - comment = s.read() + comment = s.getvalue() msg = e.author + " added a comment:\n" + comment.rstrip() @@ -109,13 +122,9 @@ def zerror(msg): b = jira_init() zephyr.init() -while True: - jira_login(b) - b.open("https://jira.mit.edu/jira/sr/jira.issueviews:searchrequest-rss/temp/SearchRequest.xml?&pid=10185&updated%3Aprevious=-1w&sorter/field=updated&sorter/order=DESC&tempMax=1000") - issues_rss = b.response().read() - b.open("https://jira.mit.edu/jira/sr/jira.issueviews:searchrequest-comments-rss/temp/SearchRequest.xml?&pid=10185&updated%3Aprevious=-1w&sorter/field=updated&sorter/order=DESC&tempMax=1000") - comments_rss = b.response().read() +count = 0 +while True: time_file_new = time_file + '.' + ''.join(random.sample(string.letters, 8)) try: @@ -125,17 +134,28 @@ while True: time.sleep(17) continue + if (count >= 200): + b = jira_init() + count = 0 + count += 1 + + jira_login(b) + b.open("https://jira.mit.edu/jira/sr/jira.issueviews:searchrequest-rss/temp/SearchRequest.xml?&pid=10185&updated%3Aprevious=-1w&sorter/field=updated&sorter/order=DESC&tempMax=1000") + issues_rss = b.response().read() + b.open("https://jira.mit.edu/jira/sr/jira.issueviews:searchrequest-comments-rss/temp/SearchRequest.xml?&pid=10185&updated%3Aprevious=-1w&sorter/field=updated&sorter/order=DESC&tempMax=1000") + comments_rss = b.response().read() + b.clear_history() + old_time = int(open(time_file_new).read()) new_time = old_time zephyrs = (feed_to_zephyrs('issue', issues_rss, parse_issue) + feed_to_zephyrs('comment', comments_rss, parse_comment)) + zephyrs.sort(key=lambda tz: tz[0]) + for (t, z) in zephyrs: + z.send() open(time_file_new, 'w').write(str(new_time)) - os.rename(time_file_new, time_file) - zephyrs.sort(key=lambda tz: tz[0]) - for (t, z) in zephyrs: - z.send() - time.sleep(60) + time.sleep(20)