OLD | NEW |
---|---|
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Helper functions for the layout test analyzer.""" | 6 """Helper functions for the layout test analyzer.""" |
7 | 7 |
8 import copy | 8 import copy |
9 from datetime import datetime | 9 from datetime import datetime |
10 from email.mime.multipart import MIMEMultipart | 10 from email.mime.multipart import MIMEMultipart |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
258 main_te_info[k] = True | 258 main_te_info[k] = True |
259 if 'Bugs' in te_info: | 259 if 'Bugs' in te_info: |
260 for bug in te_info['Bugs']: | 260 for bug in te_info['Bugs']: |
261 if bug not in bug_map: | 261 if bug not in bug_map: |
262 bug_map[bug] = [] | 262 bug_map[bug] = [] |
263 bug_map[bug].append((name, main_te_info)) | 263 bug_map[bug].append((name, main_te_info)) |
264 return bug_map | 264 return bug_map |
265 | 265 |
266 | 266 |
267 def SendStatusEmail(prev_time, analyzer_result_map, prev_analyzer_result_map, | 267 def SendStatusEmail(prev_time, analyzer_result_map, prev_analyzer_result_map, |
268 bug_anno_map, receiver_email_address): | 268 bug_anno_map, receiver_email_address, testname_group_name): |
dennis_jeffrey
2011/08/30 20:57:48
I think we can just call the variable "test_group_
imasaki1
2011/08/30 21:47:39
Done.
| |
269 """Send status email. | 269 """Send status email. |
270 | 270 |
271 Args: | 271 Args: |
272 prev_time: the date string such as '2011-10-09-11'. This format has been | 272 prev_time: the date string such as '2011-10-09-11'. This format has been |
273 used in this analyzer. | 273 used in this analyzer. |
274 analyzer_result_map: current analyzer result. | 274 analyzer_result_map: current analyzer result. |
275 prev_analyzer_result_map: previous analyzer result, which is read from | 275 prev_analyzer_result_map: previous analyzer result, which is read from |
276 a file. | 276 a file. |
277 bug_anno_map: bug annotation map where bug name and annotations are | 277 bug_anno_map: bug annotation map where bug name and annotations are |
278 stored. | 278 stored. |
279 receiver_email_address: receiver's email address. | 279 receiver_email_address: receiver's email address. |
280 testname_group_name: a name string of test name group such as 'media'. | |
dennis_jeffrey
2011/08/30 20:57:48
test_group_name: string representing the test grou
imasaki1
2011/08/30 21:47:39
Done.
| |
280 """ | 281 """ |
281 diff_map = analyzer_result_map.CompareToOtherResultMap( | 282 diff_map = analyzer_result_map.CompareToOtherResultMap( |
282 prev_analyzer_result_map) | 283 prev_analyzer_result_map) |
283 str = analyzer_result_map.ConvertToString(prev_time, diff_map, bug_anno_map) | 284 str = analyzer_result_map.ConvertToString(prev_time, diff_map, bug_anno_map) |
284 # Add diff info about skipped/non-skipped test. | 285 # Add diff info about skipped/non-skipped test. |
285 prev_time = datetime.strptime(prev_time, '%Y-%m-%d-%H') | 286 prev_time = datetime.strptime(prev_time, '%Y-%m-%d-%H') |
286 prev_time = time.mktime(prev_time.timetuple()) | 287 prev_time = time.mktime(prev_time.timetuple()) |
287 testname_map = {} | 288 testname_map = {} |
288 for type in ['skip', 'nonskip']: | 289 for type in ['skip', 'nonskip']: |
289 for i in range(2): | 290 for i in range(2): |
(...skipping 13 matching lines...) Expand all Loading... | |
303 'LayoutTests%2Fplatform%2Fchromium%2F' | 304 'LayoutTests%2Fplatform%2Fchromium%2F' |
304 'test_expectations.txt') % (new_rev, old_rev) | 305 'test_expectations.txt') % (new_rev, old_rev) |
305 str += '<ul><a href="%s">%s->%s</a>\n' % (link, old_rev, new_rev) | 306 str += '<ul><a href="%s">%s->%s</a>\n' % (link, old_rev, new_rev) |
306 str += '<li>%s</li>\n' % author | 307 str += '<li>%s</li>\n' % author |
307 str += '<li>%s</li>\n<ul>' % date | 308 str += '<li>%s</li>\n<ul>' % date |
308 for line in target_lines: | 309 for line in target_lines: |
309 str += '<li>%s</li>\n' % line | 310 str += '<li>%s</li>\n' % line |
310 str += '</ul></ul>' | 311 str += '</ul></ul>' |
311 localtime = time.asctime(time.localtime(time.time())) | 312 localtime = time.asctime(time.localtime(time.time())) |
312 # TODO(imasaki): remove my name from here. | 313 # TODO(imasaki): remove my name from here. |
314 subject = 'Layout Test Analyzer Result (%s) : %s' % (testname_group_name, | |
dennis_jeffrey
2011/08/30 20:57:48
optional nit: remove the space right before the ':
imasaki1
2011/08/30 21:47:39
Done.
| |
315 localtime) | |
313 SendEmail('imasaki@chromium.org', 'Kenji Imasaki', | 316 SendEmail('imasaki@chromium.org', 'Kenji Imasaki', |
314 [receiver_email_address], ['Layout Test Analyzer Result'], | 317 [receiver_email_address], ['Layout Test Analyzer Result'], subject, |
315 'Layout Test Analyzer Result : ' + localtime, str) | 318 str) |
316 | 319 |
317 | 320 |
318 def SendEmail(sender_email_address, sender_name, receivers_email_addresses, | 321 def SendEmail(sender_email_address, sender_name, receivers_email_addresses, |
319 receivers_names, subject, message): | 322 receivers_names, subject, message): |
320 """Send email using localhost's mail server. | 323 """Send email using localhost's mail server. |
321 | 324 |
322 Args: | 325 Args: |
323 sender_email_address: sender's email address. | 326 sender_email_address: sender's email address. |
324 sender_name: sender's name. | 327 sender_name: sender's name. |
325 receivers_email_addresses: receiver's email addresses. | 328 receivers_email_addresses: receiver's email addresses. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
362 print 'Error: unable to send email' | 365 print 'Error: unable to send email' |
363 | 366 |
364 | 367 |
365 def FindLatestTime(time_list): | 368 def FindLatestTime(time_list): |
366 """Find latest time from |time_list|. | 369 """Find latest time from |time_list|. |
367 | 370 |
368 The current status is compared to the status of the latest file in | 371 The current status is compared to the status of the latest file in |
369 |RESULT_DIR|. | 372 |RESULT_DIR|. |
370 | 373 |
371 Args: | 374 Args: |
372 time_list: a list of time string in the form of '2011-10-23-23'. | 375 time_list: a list of time string in the form of '2011-10-23-23'. Strings |
dennis_jeffrey
2011/08/30 20:57:48
Instead of giving only the example '2011-10-23-23'
imasaki1
2011/08/30 21:47:39
Done.
| |
376 in another format are ignored. | |
dennis_jeffrey
2011/08/30 20:57:48
'in another' -->
'not in this'
imasaki1
2011/08/30 21:47:39
Done.
| |
373 | 377 |
374 Returns: | 378 Returns: |
375 a string representing latest time among the time_list or None if | 379 a string representing latest time among the time_list or None if |
376 |time_list| is empty. | 380 |time_list| is empty or no valid date string in |time_list|. |
377 """ | 381 """ |
378 if not time_list: | 382 if not time_list: |
379 return None | 383 return None |
380 latest_date = None | 384 latest_date = None |
381 for t in time_list: | 385 for t in time_list: |
382 item_date = datetime.strptime(t, '%Y-%m-%d-%H') | 386 try: |
383 if latest_date == None or latest_date < item_date: | 387 item_date = datetime.strptime(t, '%Y-%m-%d-%H') |
384 latest_date = item_date | 388 if latest_date == None or latest_date < item_date: |
dennis_jeffrey
2011/08/30 20:57:48
The goal of this function is to find the most rece
imasaki1
2011/08/30 21:47:39
? I think this is working as intended.
dennis_jeffrey
2011/08/30 22:49:07
You're right - it is working as intended and there
| |
385 return latest_date.strftime('%Y-%m-%d-%H') | 389 latest_date = item_date |
390 except ValueError: | |
391 # Do nothing. | |
392 pass | |
393 if latest_date: | |
394 return latest_date.strftime('%Y-%m-%d-%H') | |
395 else: | |
396 return None | |
386 | 397 |
387 | 398 |
388 def FindLatestResult(result_dir): | 399 def FindLatestResult(result_dir): |
389 """Find the latest result in |result_dir| and read and return them. | 400 """Find the latest result in |result_dir| and read and return them. |
390 | 401 |
391 This is used for comparison of analyzer result between current analyzer | 402 This is used for comparison of analyzer result between current analyzer |
392 and most known latest result. | 403 and most known latest result. |
393 | 404 |
394 Args: | 405 Args: |
395 result_dir: the result directory. | 406 result_dir: the result directory. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
428 list2 = map2[name]['te_info'] | 439 list2 = map2[name]['te_info'] |
429 te_diff = [item for item in list1 if not item in list2] | 440 te_diff = [item for item in list1 if not item in list2] |
430 if te_diff: | 441 if te_diff: |
431 name_list.append((name, te_diff)) | 442 name_list.append((name, te_diff)) |
432 else: | 443 else: |
433 name_list.append((name, v1)) | 444 name_list.append((name, v1)) |
434 return name_list | 445 return name_list |
435 | 446 |
436 return (GetDiffBetweenMapsHelper(map1, map2, lookIntoTestExpectationInfo), | 447 return (GetDiffBetweenMapsHelper(map1, map2, lookIntoTestExpectationInfo), |
437 GetDiffBetweenMapsHelper(map2, map1, lookIntoTestExpectationInfo)) | 448 GetDiffBetweenMapsHelper(map2, map1, lookIntoTestExpectationInfo)) |
OLD | NEW |