2010-04-20 Daniel Bates <dbates@rim.com>
authordbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 21 Apr 2010 03:54:47 +0000 (03:54 +0000)
committerdbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 21 Apr 2010 03:54:47 +0000 (03:54 +0000)
        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=37748

        Make Sheriffbot more inspirational.

        * Scripts/webkitpy/common/net/bugzilla.py:
        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
        * Scripts/webkitpy/tool/bot/irc_command.py:
        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
        * Scripts/webkitpy/tool/mocktool.py:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@57948 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKitTools/ChangeLog
WebKitTools/Scripts/webkitpy/common/net/bugzilla.py
WebKitTools/Scripts/webkitpy/common/net/bugzilla_unittest.py
WebKitTools/Scripts/webkitpy/tool/bot/irc_command.py
WebKitTools/Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py
WebKitTools/Scripts/webkitpy/tool/mocktool.py

index 02fad29..21ae415 100644 (file)
@@ -1,3 +1,17 @@
+2010-04-20  Daniel Bates  <dbates@rim.com>
+
+        Reviewed by Eric Seidel.
+
+        https://bugs.webkit.org/show_bug.cgi?id=37748
+
+        Make Sheriffbot more inspirational.
+
+        * Scripts/webkitpy/common/net/bugzilla.py:
+        * Scripts/webkitpy/common/net/bugzilla_unittest.py:
+        * Scripts/webkitpy/tool/bot/irc_command.py:
+        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
+        * Scripts/webkitpy/tool/mocktool.py:
+
 2010-04-20  Kent Tamura  <tkent@chromium.org>
 
         Reviewed by Dimitri Glazkov.
index bb22d14..6920d67 100644 (file)
@@ -230,6 +230,14 @@ class BugzillaQueries(object):
     def _fetch_attachment_ids_request_query(self, query):
         return self._parse_attachment_ids_request_query(self._load_query(query))
 
+    def _parse_quips(self, page):
+        soup = BeautifulSoup(page, convertEntities=BeautifulSoup.HTML_ENTITIES)
+        quips = soup.find(text=re.compile(r"Existing quips:")).findNext("ul").findAll("li")
+        return [unicode(quip_entry.string) for quip_entry in quips]
+
+    def fetch_quips(self):
+        return self._parse_quips(self._load_query("/quips.cgi?action=show"))
+
     # List of all r+'d bugs.
     def fetch_bug_ids_from_pending_commit_list(self):
         needs_commit_query_url = "buglist.cgi?query_format=advanced&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&field0-0-0=flagtypes.name&type0-0-0=equals&value0-0-0=review%2B"
@@ -364,6 +372,7 @@ class Bugzilla(object):
         self.authenticated = False
         self.queries = BugzillaQueries(self)
         self.committers = committers
+        self.cached_quips = []
 
         # FIXME: We should use some sort of Browser mock object when in dryrun
         # mode (to prevent any mistakes).
@@ -377,6 +386,13 @@ class Bugzilla(object):
     bug_server_regex = "https?://%s/" % re.sub('\.', '\\.', bug_server_host)
     bug_server_url = "https://%s/" % bug_server_host
 
+    def quips(self):
+        # We only fetch and parse the list of quips once per instantiation
+        # so that we do not burden bugs.webkit.org.
+        if not self.cached_quips and not self.dryrun:
+            self.cached_quips = self.queries.fetch_quips()
+        return self.cached_quips
+
     def bug_url_for_bug_id(self, bug_id, xml=False):
         if not bug_id:
             return None
index fcdfc39..4c44cdf 100644 (file)
@@ -307,11 +307,37 @@ class BugzillaQueriesTest(unittest.TestCase):
 </body>
 </html>
 """
+    _sample_quip_page = u"""
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+                      "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <title>Bugzilla Quip System</title>
+  </head>
+  <body>
+    <h2>
+
+      Existing quips:
+    </h2>
+    <ul>
+        <li>Everything should be made as simple as possible, but not simpler. - Albert Einstein</li>
+        <li>Good artists copy. Great artists steal. - Pablo Picasso</li>
+        <li>\u00e7gua mole em pedra dura, tanto bate at\u008e que fura.</li>
+
+    </ul>
+  </body>
+</html>
+"""
 
     def test_request_page_parsing(self):
         queries = BugzillaQueries(None)
         self.assertEquals([40511, 40722, 40723], queries._parse_attachment_ids_request_query(self._sample_request_page))
 
+    def test_quip_page_parsing(self):
+        queries = BugzillaQueries(None)
+        expected_quips = ["Everything should be made as simple as possible, but not simpler. - Albert Einstein", "Good artists copy. Great artists steal. - Pablo Picasso", u"\u00e7gua mole em pedra dura, tanto bate at\u008e que fura."]
+        self.assertEquals(expected_quips, queries._parse_quips(self._sample_quip_page))
+
     def test_load_query(self):
         queries = BugzillaQueries(Mock())
         queries._load_query("request.cgi?action=queue&type=review&group=type")
index 9773a71..c21fdc6 100644 (file)
@@ -26,6 +26,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import random
 import webkitpy.common.config.irc as config_irc
 
 from webkitpy.common.checkout.changelog import view_source_url
@@ -76,4 +77,6 @@ class Rollout(IRCCommand):
 
 class Hi(IRCCommand):
     def execute(self, nick, args, tool, sheriff):
-        return '"Only you can prevent forest fires." -- Smokey the Bear'
+        quips = tool.bugs.quips()
+        quips.append('"Only you can prevent forest fires." -- Smokey the Bear')
+        return random.choice(quips)
index 63c27cb..d5116e4 100644 (file)
@@ -27,6 +27,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import unittest
+import random
 
 from webkitpy.common.system.outputcapture import OutputCapture
 from webkitpy.tool.bot.sheriff import Sheriff
@@ -45,6 +46,7 @@ def run(message):
 
 class SheriffIRCBotTest(unittest.TestCase):
     def test_hi(self):
+        random.seed(23324)
         expected_stderr = 'MOCK: irc.post: "Only you can prevent forest fires." -- Smokey the Bear\n'
         OutputCapture().assert_outputs(self, run, args=["hi"], expected_stderr=expected_stderr)
 
index c56c53e..cc361ff 100644 (file)
@@ -270,6 +270,9 @@ class MockBugzilla(Mock):
         log("bug_title: %s" % bug_title)
         log("bug_description: %s" % bug_description)
 
+    def quips(self):
+        return ["Good artists copy. Great artists steal. - Pablo Picasso"]
+
     def fetch_bug(self, bug_id):
         return Bug(self.bug_cache.get(bug_id), self)