]> andersk Git - jira-zephyrbot.git/blobdiff - jirabot.py
Decrease interval to 20 seconds.
[jira-zephyrbot.git] / jirabot.py
index 6198303a2da4efc7fec85f03de4ac05d86fda409..5495e5af5bc5ed8b3963e1418e36927ac93cecef 100755 (executable)
@@ -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('<table>', 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)
This page took 0.488954 seconds and 4 git commands to generate.