summaryrefslogtreecommitdiffstats
path: root/WebKitTools/Scripts/webkitpy/common/net/statusserver.py
diff options
context:
space:
mode:
Diffstat (limited to 'WebKitTools/Scripts/webkitpy/common/net/statusserver.py')
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/statusserver.py70
1 files changed, 50 insertions, 20 deletions
diff --git a/WebKitTools/Scripts/webkitpy/common/net/statusserver.py b/WebKitTools/Scripts/webkitpy/common/net/statusserver.py
index 57390b8..3d03dcd 100644
--- a/WebKitTools/Scripts/webkitpy/common/net/statusserver.py
+++ b/WebKitTools/Scripts/webkitpy/common/net/statusserver.py
@@ -41,14 +41,18 @@ _log = logging.getLogger("webkitpy.common.net.statusserver")
class StatusServer:
default_host = "queues.webkit.org"
- def __init__(self, host=default_host):
+ def __init__(self, host=default_host, browser=None, bot_id=None):
self.set_host(host)
- self.browser = Browser()
+ self._browser = browser or Browser()
+ self.set_bot_id(bot_id)
def set_host(self, host):
self.host = host
self.url = "http://%s" % self.host
+ def set_bot_id(self, bot_id):
+ self.bot_id = bot_id
+
def results_url_for_status(self, status_id):
return "%s/results/%s" % (self.url, status_id)
@@ -56,14 +60,14 @@ class StatusServer:
if not patch:
return
if patch.bug_id():
- self.browser["bug_id"] = unicode(patch.bug_id())
+ self._browser["bug_id"] = unicode(patch.bug_id())
if patch.id():
- self.browser["patch_id"] = unicode(patch.id())
+ self._browser["patch_id"] = unicode(patch.id())
def _add_results_file(self, results_file):
if not results_file:
return
- self.browser.add_file(results_file, "text/plain", "results.txt", 'results_file')
+ self._browser.add_file(results_file, "text/plain", "results.txt", 'results_file')
def _post_status_to_server(self, queue_name, status, patch, results_file):
if results_file:
@@ -71,36 +75,61 @@ class StatusServer:
results_file.seek(0)
update_status_url = "%s/update-status" % self.url
- self.browser.open(update_status_url)
- self.browser.select_form(name="update_status")
- self.browser["queue_name"] = queue_name
+ self._browser.open(update_status_url)
+ self._browser.select_form(name="update_status")
+ self._browser["queue_name"] = queue_name
+ if self.bot_id:
+ self._browser["bot_id"] = self.bot_id
self._add_patch(patch)
- self.browser["status"] = status
+ self._browser["status"] = status
self._add_results_file(results_file)
- return self.browser.submit().read() # This is the id of the newly created status object.
+ return self._browser.submit().read() # This is the id of the newly created status object.
def _post_svn_revision_to_server(self, svn_revision_number, broken_bot):
update_svn_revision_url = "%s/update-svn-revision" % self.url
- self.browser.open(update_svn_revision_url)
- self.browser.select_form(name="update_svn_revision")
- self.browser["number"] = unicode(svn_revision_number)
- self.browser["broken_bot"] = broken_bot
- return self.browser.submit().read()
+ self._browser.open(update_svn_revision_url)
+ self._browser.select_form(name="update_svn_revision")
+ self._browser["number"] = unicode(svn_revision_number)
+ self._browser["broken_bot"] = broken_bot
+ return self._browser.submit().read()
def _post_work_items_to_server(self, queue_name, work_items):
update_work_items_url = "%s/update-work-items" % self.url
- self.browser.open(update_work_items_url)
- self.browser.select_form(name="update_work_items")
- self.browser["queue_name"] = queue_name
+ self._browser.open(update_work_items_url)
+ self._browser.select_form(name="update_work_items")
+ self._browser["queue_name"] = queue_name
work_items = map(unicode, work_items) # .join expects strings
- self.browser["work_items"] = " ".join(work_items)
- return self.browser.submit().read()
+ self._browser["work_items"] = " ".join(work_items)
+ return self._browser.submit().read()
+
+ def _post_work_item_to_ews(self, attachment_id):
+ submit_to_ews_url = "%s/submit-to-ews" % self.url
+ self._browser.open(submit_to_ews_url)
+ self._browser.select_form(name="submit_to_ews")
+ self._browser["attachment_id"] = unicode(attachment_id)
+ self._browser.submit()
+
+ def submit_to_ews(self, attachment_id):
+ _log.info("Submitting attachment %s to EWS queues" % attachment_id)
+ return NetworkTransaction().run(lambda: self._post_work_item_to_ews(attachment_id))
def next_work_item(self, queue_name):
_log.debug("Fetching next work item for %s" % queue_name)
patch_status_url = "%s/next-patch/%s" % (self.url, queue_name)
return self._fetch_url(patch_status_url)
+ def _post_release_work_item(self, queue_name, patch):
+ release_patch_url = "%s/release-patch" % (self.url)
+ self._browser.open(release_patch_url)
+ self._browser.select_form(name="release_patch")
+ self._browser["queue_name"] = queue_name
+ self._browser["attachment_id"] = unicode(patch.id())
+ self._browser.submit()
+
+ def release_work_item(self, queue_name, patch):
+ _log.debug("Releasing work item %s from %s" % (patch.id(), queue_name))
+ return NetworkTransaction(convert_404_to_None=True).run(lambda: self._post_release_work_item(queue_name, patch))
+
def update_work_items(self, queue_name, work_items):
_log.debug("Recording work items: %s for %s" % (work_items, queue_name))
return NetworkTransaction().run(lambda: self._post_work_items_to_server(queue_name, work_items))
@@ -114,6 +143,7 @@ class StatusServer:
return NetworkTransaction().run(lambda: self._post_svn_revision_to_server(svn_revision_number, broken_bot))
def _fetch_url(self, url):
+ # FIXME: This should use NetworkTransaction's 404 handling instead.
try:
return urllib2.urlopen(url).read()
except urllib2.HTTPError, e: