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

Side by Side Diff: build/android/pylib/results/flakiness_dashboard/json_results_generator.py

Issue 1315743004: [Android] Add a custom pylintrc for build/android/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix appurify_sanitized import-errors Created 5 years, 3 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 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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 # 5 #
6 # Most of this file was ported over from Blink's 6 # Most of this file was ported over from Blink's
7 # Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py 7 # Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
8 # Tools/Scripts/webkitpy/common/net/file_uploader.py 8 # Tools/Scripts/webkitpy/common/net/file_uploader.py
9 # 9 #
10 10
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 55
56 return result 56 return result
57 57
58 58
59 def AddPathToTrie(path, value, trie): 59 def AddPathToTrie(path, value, trie):
60 """Inserts a single path and value into a directory trie structure.""" 60 """Inserts a single path and value into a directory trie structure."""
61 if not '/' in path: 61 if not '/' in path:
62 trie[path] = value 62 trie[path] = value
63 return 63 return
64 64
65 directory, _slash, rest = path.partition('/') 65 directory, _, rest = path.partition('/')
66 if not directory in trie: 66 if not directory in trie:
67 trie[directory] = {} 67 trie[directory] = {}
68 AddPathToTrie(rest, value, trie[directory]) 68 AddPathToTrie(rest, value, trie[directory])
69 69
70 70
71 def TestTimingsTrie(individual_test_timings): 71 def TestTimingsTrie(individual_test_timings):
72 """Breaks a test name into dicts by directory 72 """Breaks a test name into dicts by directory
73 73
74 foo/bar/baz.html: 1ms 74 foo/bar/baz.html: 1ms
75 foo/bar/baz1.html: 3ms 75 foo/bar/baz1.html: 3ms
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 # If there was an error don't write a results.json 230 # If there was an error don't write a results.json
231 # file at all as it would lose all the information on the 231 # file at all as it would lose all the information on the
232 # bot. 232 # bot.
233 _log.error('Archive directory is inaccessible. Not ' 233 _log.error('Archive directory is inaccessible. Not '
234 'modifying or clobbering the results.json ' 234 'modifying or clobbering the results.json '
235 'file: ' + str(error)) 235 'file: ' + str(error))
236 return None 236 return None
237 237
238 builder_name = self._builder_name 238 builder_name = self._builder_name
239 if results_json and builder_name not in results_json: 239 if results_json and builder_name not in results_json:
240 _log.debug('Builder name (%s) is not in the results.json file.' 240 _log.debug('Builder name (%s) is not in the results.json file.',
241 % builder_name) 241 builder_name)
242 242
243 self._ConvertJSONToCurrentVersion(results_json) 243 self._ConvertJSONToCurrentVersion(results_json)
244 244
245 if builder_name not in results_json: 245 if builder_name not in results_json:
246 results_json[builder_name] = ( 246 results_json[builder_name] = (
247 self._CreateResultsForBuilderJSON()) 247 self._CreateResultsForBuilderJSON())
248 248
249 results_for_builder = results_json[builder_name] 249 results_for_builder = results_json[builder_name]
250 250
251 if builder_name: 251 if builder_name:
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 # Set uploading timeout in case appengine server is having problems. 290 # Set uploading timeout in case appengine server is having problems.
291 # 120 seconds are more than enough to upload test results. 291 # 120 seconds are more than enough to upload test results.
292 uploader = _FileUploader(url, 120) 292 uploader = _FileUploader(url, 120)
293 try: 293 try:
294 response = uploader.UploadAsMultipartFormData(files, attrs) 294 response = uploader.UploadAsMultipartFormData(files, attrs)
295 if response: 295 if response:
296 if response.code == 200: 296 if response.code == 200:
297 _log.info('JSON uploaded.') 297 _log.info('JSON uploaded.')
298 else: 298 else:
299 _log.debug( 299 _log.debug(
300 "JSON upload failed, %d: '%s'" % 300 "JSON upload failed, %d: '%s'", response.code, response.read())
301 (response.code, response.read()))
302 else: 301 else:
303 _log.error('JSON upload failed; no response returned') 302 _log.error('JSON upload failed; no response returned')
304 except Exception, err: 303 except Exception, err: # pylint: disable=broad-except
305 _log.error('Upload failed: %s' % err) 304 _log.error('Upload failed: %s', err)
306 return 305 return
307 306
308 def _GetTestTiming(self, test_name): 307 def _GetTestTiming(self, test_name):
309 """Returns test timing data (elapsed time) in second 308 """Returns test timing data (elapsed time) in second
310 for the given test_name.""" 309 for the given test_name."""
311 if test_name in self._test_results_map: 310 if test_name in self._test_results_map:
312 # Floor for now to get time in seconds. 311 # Floor for now to get time in seconds.
313 return int(self._test_results_map[test_name].test_run_time) 312 return int(self._test_results_map[test_name].test_run_time)
314 return 0 313 return 0
315 314
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 error = http_error 390 error = http_error
392 except urllib2.URLError, url_error: 391 except urllib2.URLError, url_error:
393 error = url_error 392 error = url_error
394 393
395 if old_results: 394 if old_results:
396 # Strip the prefix and suffix so we can get the actual JSON object. 395 # Strip the prefix and suffix so we can get the actual JSON object.
397 old_results = StripJSONWrapper(old_results) 396 old_results = StripJSONWrapper(old_results)
398 397
399 try: 398 try:
400 results_json = json.loads(old_results) 399 results_json = json.loads(old_results)
401 except Exception: 400 except Exception: # pylint: disable=broad-except
402 _log.debug('results.json was not valid JSON. Clobbering.') 401 _log.debug('results.json was not valid JSON. Clobbering.')
403 # The JSON file is not valid JSON. Just clobber the results. 402 # The JSON file is not valid JSON. Just clobber the results.
404 results_json = {} 403 results_json = {}
405 else: 404 else:
406 _log.debug('Old JSON results do not exist. Starting fresh.') 405 _log.debug('Old JSON results do not exist. Starting fresh.')
407 results_json = {} 406 results_json = {}
408 407
409 return results_json, error 408 return results_json, error
410 409
411 def _InsertFailureSummaries(self, results_for_builder): 410 def _InsertFailureSummaries(self, results_for_builder):
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 def _UploadData(self, content_type, data): 637 def _UploadData(self, content_type, data):
639 start = time.time() 638 start = time.time()
640 end = start + self._timeout_seconds 639 end = start + self._timeout_seconds
641 while time.time() < end: 640 while time.time() < end:
642 try: 641 try:
643 request = urllib2.Request(self._url, data, 642 request = urllib2.Request(self._url, data,
644 {'Content-Type': content_type}) 643 {'Content-Type': content_type})
645 return urllib2.urlopen(request) 644 return urllib2.urlopen(request)
646 except urllib2.HTTPError as e: 645 except urllib2.HTTPError as e:
647 _log.warn("Received HTTP status %s loading \"%s\". " 646 _log.warn("Received HTTP status %s loading \"%s\". "
648 'Retrying in 10 seconds...' % (e.code, e.filename)) 647 'Retrying in 10 seconds...', e.code, e.filename)
649 time.sleep(10) 648 time.sleep(10)
650 649
651 650
652 def _GetMIMEType(filename): 651 def _GetMIMEType(filename):
653 return mimetypes.guess_type(filename)[0] or 'application/octet-stream' 652 return mimetypes.guess_type(filename)[0] or 'application/octet-stream'
654 653
655 654
656 # FIXME: Rather than taking tuples, this function should take more 655 # FIXME: Rather than taking tuples, this function should take more
657 # structured data. 656 # structured data.
658 def _EncodeMultipartFormData(fields, files): 657 def _EncodeMultipartFormData(fields, files):
(...skipping 29 matching lines...) Expand all
688 lines.append('') 687 lines.append('')
689 if isinstance(value, unicode): 688 if isinstance(value, unicode):
690 value = value.encode('utf-8') 689 value = value.encode('utf-8')
691 lines.append(value) 690 lines.append(value)
692 691
693 lines.append('--' + BOUNDARY + '--') 692 lines.append('--' + BOUNDARY + '--')
694 lines.append('') 693 lines.append('')
695 body = CRLF.join(lines) 694 body = CRLF.join(lines)
696 content_type = 'multipart/form-data; boundary=%s' % BOUNDARY 695 content_type = 'multipart/form-data; boundary=%s' % BOUNDARY
697 return content_type, body 696 return content_type, body
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698