Index: third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld.py |
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bc4bdbf84a94f924a1f79493bb3095b98a0f9ea7 |
--- /dev/null |
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld.py |
@@ -0,0 +1,60 @@ |
+# Copyright 2016 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Utility functions to communicate with Rietveld.""" |
qyearsley
2016/06/14 22:50:42
This may only be used by webkit-patch rebaseline-f
|
+ |
+import collections |
+import json |
+ |
+ |
+TryJob = collections.namedtuple('TryJob', ('builder_name', 'master_name', 'build_number')) |
+ |
+ |
+def latest_try_jobs(issue_number, builder_names, web, patchset_number=None): |
+ """Returns a list of TryJob objects for jobs on the latest patchset. |
+ |
+ Args: |
+ issue_number: A Rietveld issue number. |
+ builder_names: Builders that we're interested in; try jobs for only |
+ these builders will be listed. |
+ web: webkitpy.common.net.web.Web object (which can be mocked out). |
+ patchset_number: Use a specific patchset instead of the latest one. |
qyearsley
2016/06/14 22:50:42
Added this because I anticipate adding a --patchse
|
+ |
+ Returns: |
+ A list of TryJob objects. |
+ """ |
+ if patchset_number: |
+ url = _patchset_url(issue_number, patchset_number) |
+ else: |
+ url = _latest_patchset_url(issue_number, web) |
+ patchset_data = _get_json(url, web) |
+ assert 'try_job_results' in patchset_data |
+ jobs = [] |
+ for job in patchset_data['try_job_results']: |
+ if job['builder'] not in builder_names: |
+ continue |
+ jobs.append(TryJob( |
+ builder_name=job['builder'], |
+ master_name=job['master'], |
+ build_number=job['buildnumber'])) |
+ return jobs |
+ |
+ |
+def _latest_patchset_url(issue_number, web): |
+ issue_data = _get_json(_issue_url(issue_number), web) |
+ latest_patchset_number = issue_data["patchsets"][-1] |
+ return _patchset_url(issue_number, latest_patchset_number) |
+ |
+ |
+def _get_json(url, web): |
+ assert not isinstance(web, tuple), web |
+ return json.loads(web.get_binary(url)) |
+ |
+ |
+def _issue_url(issue_number): |
+ return 'https://codereview.chromium.org/api/%s' % issue_number |
+ |
+ |
+def _patchset_url(issue_number, patchset_number): |
+ return '%s/%s' % (_issue_url(issue_number), patchset_number) |