Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(531)

Unified Diff: third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot.py

Issue 2152663003: Refactor the buildbot module in webkitpy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot.py
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot.py
index 77517e602904bed3a2d6c110e65ec912961b57c4..3896db7fc4ad2aee4930710eb5bcbe3af7001f5d 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot.py
@@ -26,48 +26,49 @@
# (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 re
import urllib2
-import webkitpy.common.config.urls as config_urls
from webkitpy.common.memoized import memoized
from webkitpy.common.net.layouttestresults import LayoutTestResults
from webkitpy.common.net.networktransaction import NetworkTransaction
from webkitpy.common.system.logutils import get_logger
+RESULTS_URL_BASE = 'https://storage.googleapis.com/chromium-layout-test-archives'
+
_log = get_logger(__file__)
-class Builder(object):
+class BuildBot(object):
+ """This class represents an interface to BuildBot-related functionality.
- def __init__(self, builder_name, buildbot):
- self._name = builder_name
- self._buildbot = buildbot
+ This includes fetching layout test results from Google Storage.
+ """
dcampb 2016/07/15 17:33:26 Whats the benefit of not having a __init__ in this
qyearsley 2016/07/15 17:49:59 Good question -- __init__ methods aren't necessary
- def name(self):
- return self._name
+ def results_url(self, builder_name, build_number=None):
+ """Returns a URL for one set of archived layout test results.
- def results_url(self):
- return config_urls.chromium_results_url_base_for_builder(self._name)
+ If a build number is given, this will be results for a particular run;
+ otherwise it will be the accumulated results URL, which should have
+ the latest results.
+ """
+ if build_number:
+ url_base = self.builder_results_url_base(builder_name)
+ return "%s/%s/layout-test-results" % (url_base, build_number)
+ return self.accumulated_results_url_base(builder_name)
- def latest_layout_test_results_url(self):
- return config_urls.chromium_accumulated_results_url_base_for_builder(self._name)
+ def builder_results_url_base(self, builder_name):
+ return '%s/%s' % (RESULTS_URL_BASE, re.sub('[ .()]', '_', builder_name))
wkorman 2016/07/19 22:46:27 What is this re sub doing and why? Perhaps add a c
qyearsley 2016/07/19 23:17:26 I think that replacing parentheses, dots and space
@memoized
- def latest_layout_test_results(self):
- return self.fetch_layout_test_results(self.latest_layout_test_results_url())
-
- def _fetch_file_from_results(self, results_url, file_name):
- # It seems this can return None if the url redirects and then returns 404.
- result = urllib2.urlopen("%s/%s" % (results_url, file_name))
- if not result:
- return None
- # urlopen returns a file-like object which sometimes works fine with str()
- # but sometimes is a addinfourl object. In either case calling read() is correct.
- return result.read()
+ def accumulated_results_url_base(self, builder_name):
+ return self.builder_results_url_base(builder_name) + "/results/layout-test-results"
wkorman 2016/07/19 22:46:27 Is there a doc we can link to in class doc comment
qyearsley 2016/07/19 23:17:26 The official doc is supposed to be https://www.chr
def fetch_layout_test_results(self, results_url):
+ """Returns a LayoutTestResults object for results fetched from a given URL."""
# FIXME: This should cache that the result was a 404 and stop hitting the network.
+ # This may be able to be done by just adding a @memoized decorator.
results_file = NetworkTransaction(convert_404_to_None=True).run(
lambda: self._fetch_file_from_results(results_url, "failing_results.json"))
revision = NetworkTransaction(convert_404_to_None=True).run(
@@ -76,24 +77,12 @@ class Builder(object):
results_file = None
dcampb 2016/07/15 17:33:26 Why is there a Builder object? Would it be benefic
qyearsley 2016/07/15 17:49:59 That's what this CL does -- after this change, the
return LayoutTestResults.results_from_string(results_file, revision)
- def build(self, build_number):
- return Build(self, build_number=build_number)
-
-
-class Build(object):
-
- def __init__(self, builder, build_number):
- self._builder = builder
- self._number = build_number
-
- def results_url(self):
- return "%s/%s/layout-test-results" % (self._builder.results_url(), self._number)
-
- def builder(self):
- return self._builder
-
-
-class BuildBot(object):
-
- def builder_with_name(self, builder_name):
- return Builder(builder_name, self)
+ def _fetch_file_from_results(self, results_url, file_name):
+ # It seems this can return None if the url redirects and then returns 404.
+ # FIXME: This could use Web instead of using urllib2 directly.
+ result = urllib2.urlopen("%s/%s" % (results_url, file_name))
+ if not result:
+ return None
+ # urlopen returns a file-like object which sometimes works fine with str()
+ # but sometimes is a addinfourl object. In either case calling read() is correct.
+ return result.read()

Powered by Google App Engine
This is Rietveld 408576698