OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 | 2 |
3 ''' | 3 ''' |
4 Copyright 2013 Google Inc. | 4 Copyright 2013 Google Inc. |
5 | 5 |
6 Use of this source code is governed by a BSD-style license that can be | 6 Use of this source code is governed by a BSD-style license that can be |
7 found in the LICENSE file. | 7 found in the LICENSE file. |
8 ''' | 8 ''' |
9 | 9 |
10 ''' | 10 ''' |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 """Gathers the results of all tests, across all builders (based on the | 117 """Gathers the results of all tests, across all builders (based on the |
118 contents of actual_builder_dicts and expected_builder_dicts) | 118 contents of actual_builder_dicts and expected_builder_dicts) |
119 and returns it in a list in the same form needed for self.GetAll(). | 119 and returns it in a list in the same form needed for self.GetAll(). |
120 | 120 |
121 This is a static method, because once we start refreshing results | 121 This is a static method, because once we start refreshing results |
122 asynchronously, we need to make sure we are not corrupting the object's | 122 asynchronously, we need to make sure we are not corrupting the object's |
123 member variables. | 123 member variables. |
124 """ | 124 """ |
125 test_data = [] | 125 test_data = [] |
126 category_dict = {} | 126 category_dict = {} |
| 127 Results._EnsureIncludedInCategoryDict(category_dict, 'resultType', [ |
| 128 gm_json.JSONKEY_ACTUALRESULTS_FAILED, |
| 129 gm_json.JSONKEY_ACTUALRESULTS_FAILUREIGNORED, |
| 130 gm_json.JSONKEY_ACTUALRESULTS_NOCOMPARISON, |
| 131 gm_json.JSONKEY_ACTUALRESULTS_SUCCEEDED, |
| 132 ]) |
| 133 |
127 for builder in sorted(actual_builder_dicts.keys()): | 134 for builder in sorted(actual_builder_dicts.keys()): |
128 actual_results_for_this_builder = ( | 135 actual_results_for_this_builder = ( |
129 actual_builder_dicts[builder][gm_json.JSONKEY_ACTUALRESULTS]) | 136 actual_builder_dicts[builder][gm_json.JSONKEY_ACTUALRESULTS]) |
130 for result_type in sorted(actual_results_for_this_builder.keys()): | 137 for result_type in sorted(actual_results_for_this_builder.keys()): |
131 results_of_this_type = actual_results_for_this_builder[result_type] | 138 results_of_this_type = actual_results_for_this_builder[result_type] |
132 if not results_of_this_type: | 139 if not results_of_this_type: |
133 continue | 140 continue |
134 for image_name in sorted(results_of_this_type.keys()): | 141 for image_name in sorted(results_of_this_type.keys()): |
135 actual_image = results_of_this_type[image_name] | 142 actual_image = results_of_this_type[image_name] |
136 try: | 143 try: |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 "builder": builder, | 205 "builder": builder, |
199 "test": test, | 206 "test": test, |
200 "config": config, | 207 "config": config, |
201 "resultType": updated_result_type, | 208 "resultType": updated_result_type, |
202 "actualHashType": actual_image[0], | 209 "actualHashType": actual_image[0], |
203 "actualHashDigest": str(actual_image[1]), | 210 "actualHashDigest": str(actual_image[1]), |
204 "expectedHashType": expected_image[0], | 211 "expectedHashType": expected_image[0], |
205 "expectedHashDigest": str(expected_image[1]), | 212 "expectedHashDigest": str(expected_image[1]), |
206 } | 213 } |
207 Results._AddToCategoryDict(category_dict, results_for_this_test) | 214 Results._AddToCategoryDict(category_dict, results_for_this_test) |
208 | 215 test_data.append(results_for_this_test) |
209 # TODO(epoger): For now, don't include succeeded results in the raw | |
210 # data. There are so many of them that they make the client too slow. | |
211 if updated_result_type != gm_json.JSONKEY_ACTUALRESULTS_SUCCEEDED: | |
212 test_data.append(results_for_this_test) | |
213 return {"categories": category_dict, "testData": test_data} | 216 return {"categories": category_dict, "testData": test_data} |
214 | 217 |
215 @staticmethod | 218 @staticmethod |
216 def _AddToCategoryDict(category_dict, test_results): | 219 def _AddToCategoryDict(category_dict, test_results): |
217 """Add test_results to the category dictionary we are building | 220 """Add test_results to the category dictionary we are building. |
218 (see documentation of self.GetAll() for the format of this dictionary). | 221 (See documentation of self.GetAll() for the format of this dictionary.) |
219 | 222 |
220 params: | 223 params: |
221 category_dict: category dict-of-dicts to add to; modify this in-place | 224 category_dict: category dict-of-dicts to add to; modify this in-place |
222 test_results: test data with which to update category_list, in a dict: | 225 test_results: test data with which to update category_list, in a dict: |
223 { | 226 { |
224 "category_name": "category_value", | 227 "category_name": "category_value", |
225 "category_name": "category_value", | 228 "category_name": "category_value", |
226 ... | 229 ... |
227 } | 230 } |
228 """ | 231 """ |
229 for category in CATEGORIES_TO_SUMMARIZE: | 232 for category in CATEGORIES_TO_SUMMARIZE: |
230 category_value = test_results.get(category) | 233 category_value = test_results.get(category) |
231 if not category_value: | 234 if not category_value: |
232 continue # test_results did not include this category, keep going | 235 continue # test_results did not include this category, keep going |
233 if not category_dict.get(category): | 236 if not category_dict.get(category): |
234 category_dict[category] = {} | 237 category_dict[category] = {} |
235 if not category_dict[category].get(category_value): | 238 if not category_dict[category].get(category_value): |
236 category_dict[category][category_value] = 0 | 239 category_dict[category][category_value] = 0 |
237 category_dict[category][category_value] += 1 | 240 category_dict[category][category_value] += 1 |
| 241 |
| 242 @staticmethod |
| 243 def _EnsureIncludedInCategoryDict(category_dict, |
| 244 category_name, category_values): |
| 245 """Ensure that the category name/value pairs are included in category_dict, |
| 246 even if there aren't any results with that name/value pair. |
| 247 (See documentation of self.GetAll() for the format of this dictionary.) |
| 248 |
| 249 params: |
| 250 category_dict: category dict-of-dicts to modify |
| 251 category_name: category name, as a string |
| 252 category_values: list of values we want to make sure are represented |
| 253 for this category |
| 254 """ |
| 255 if not category_dict.get(category_name): |
| 256 category_dict[category_name] = {} |
| 257 for category_value in category_values: |
| 258 if not category_dict[category_name].get(category_value): |
| 259 category_dict[category_name][category_value] = 0 |
OLD | NEW |