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

Side by Side Diff: third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld.py

Issue 2181533002: Refactoring: Merge TryJob and Build class and move Build class to buildbot module. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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 unified diff | Download patch
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Utility functions to communicate with Rietveld.""" 5 """Utility functions to communicate with Rietveld."""
6 6
7 import collections 7 import collections
8 import json 8 import json
9 import logging 9 import logging
10 import urllib2 10 import urllib2
11 11
12 from webkitpy.common.net.buildbot import Build
13
12 14
13 _log = logging.getLogger(__name__) 15 _log = logging.getLogger(__name__)
14 16
15 BASE_CODEREVIEW_URL = 'https://codereview.chromium.org/api' 17 BASE_CODEREVIEW_URL = 'https://codereview.chromium.org/api'
16 18
17 TryJob = collections.namedtuple('TryJob', ('builder_name', 'build_number'))
18 19
19 def latest_try_jobs(issue_number, builder_names, web, patchset_number=None): 20 def latest_try_jobs(issue_number, builder_names, web, patchset_number=None):
20 """Returns a list of TryJob objects for jobs on the latest patchset. 21 """Returns a list of Build objects for jobs on the latest patchset.
21 22
22 Args: 23 Args:
23 issue_number: A Rietveld issue number. 24 issue_number: A Rietveld issue number.
24 builder_names: Builders that we're interested in; try jobs for only 25 builder_names: Builders that we're interested in; try jobs for only
25 these builders will be listed. 26 these builders will be listed.
26 web: webkitpy.common.net.web.Web object (which can be mocked out). 27 web: webkitpy.common.net.web.Web object (which can be mocked out).
27 patchset_number: Use a specific patchset instead of the latest one. 28 patchset_number: Use a specific patchset instead of the latest one.
28 29
29 Returns: 30 Returns:
30 A list of TryJob objects for the latest job for each builder, on the 31 A list of Build objects for the latest job for each builder, on the
31 latest patchset. If none were found, an empty list is returned. 32 latest patchset. If none were found, an empty list is returned.
32 """ 33 """
33 try: 34 try:
34 if patchset_number: 35 if patchset_number:
35 url = _patchset_url(issue_number, patchset_number) 36 url = _patchset_url(issue_number, patchset_number)
36 else: 37 else:
37 url = _latest_patchset_url(issue_number, web) 38 url = _latest_patchset_url(issue_number, web)
38 patchset_data = _get_json(url, web) 39 patchset_data = _get_json(url, web)
39 except (urllib2.URLError, ValueError): 40 except (urllib2.URLError, ValueError):
40 return [] 41 return []
41 jobs = [] 42 jobs = []
42 for job in patchset_data['try_job_results']: 43 for job in patchset_data['try_job_results']:
43 if job['builder'] not in builder_names: 44 if job['builder'] not in builder_names:
44 continue 45 continue
45 jobs.append(TryJob( 46 jobs.append(Build(
46 builder_name=job['builder'], 47 builder_name=job['builder'],
47 build_number=job['buildnumber'])) 48 build_number=job['buildnumber']))
48 return filter_latest_jobs(jobs) 49 return filter_latest_jobs(jobs)
49 50
50 51
51 def _latest_patchset_url(issue_number, web): 52 def _latest_patchset_url(issue_number, web):
52 issue_data = _get_json(_issue_url(issue_number), web) 53 issue_data = _get_json(_issue_url(issue_number), web)
53 latest_patchset_number = issue_data["patchsets"][-1] 54 latest_patchset_number = issue_data["patchsets"][-1]
54 return _patchset_url(issue_number, latest_patchset_number) 55 return _patchset_url(issue_number, latest_patchset_number)
55 56
(...skipping 22 matching lines...) Expand all
78 79
79 80
80 def _patchset_url(issue_number, patchset_number): 81 def _patchset_url(issue_number, patchset_number):
81 return '%s/%s' % (_issue_url(issue_number), patchset_number) 82 return '%s/%s' % (_issue_url(issue_number), patchset_number)
82 83
83 84
84 def filter_latest_jobs(jobs): 85 def filter_latest_jobs(jobs):
85 """Filters out the list of jobs to include only the latest for each builder. 86 """Filters out the list of jobs to include only the latest for each builder.
86 87
87 Args: 88 Args:
88 jobs: A list of TryJob objects. 89 jobs: A list of Build objects.
89 90
90 Returns: 91 Returns:
91 A list of TryJob objects such that only the latest job for each builder 92 A list of Build objects such that only the latest job for each builder
92 is kept. 93 is kept.
93 """ 94 """
94 builder_to_highest_number = {} 95 builder_to_highest_number = {}
95 for j in jobs: 96 for j in jobs:
96 if j.build_number > builder_to_highest_number.get(j.builder_name, 0): 97 if j.build_number > builder_to_highest_number.get(j.builder_name, 0):
97 builder_to_highest_number[j.builder_name] = j.build_number 98 builder_to_highest_number[j.builder_name] = j.build_number
98 return [j for j in jobs if builder_to_highest_number[j.builder_name] == j.bu ild_number] 99 return [j for j in jobs if builder_to_highest_number[j.builder_name] == j.bu ild_number]
99 100
100 101
101 def get_latest_try_job_results(issue_number, web): 102 def get_latest_try_job_results(issue_number, web):
102 url = _latest_patchset_url(issue_number, web) 103 url = _latest_patchset_url(issue_number, web)
103 patchset_data = _get_json(url, web) 104 patchset_data = _get_json(url, web)
104 results = {} 105 results = {}
105 for job in patchset_data['try_job_results']: 106 for job in patchset_data['try_job_results']:
106 results[job['builder']] = job['result'] 107 results[job['builder']] = job['result']
107 return results 108 return results
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698