Chromium Code Reviews| Index: appengine/findit/handlers/flake/check_flake.py |
| diff --git a/appengine/findit/handlers/flake/check_flake.py b/appengine/findit/handlers/flake/check_flake.py |
| index 4e23f629df1cf44f2b2424c4509dc87b33da8bcf..11e27fd66e9a1e3594d3cf35252ae7d0b29b2b85 100644 |
| --- a/appengine/findit/handlers/flake/check_flake.py |
| +++ b/appengine/findit/handlers/flake/check_flake.py |
| @@ -3,6 +3,7 @@ |
| # found in the LICENSE file. |
| from google.appengine.api import users |
| +from google.appengine.ext import ndb |
| from common import auth_util |
| from common import constants |
| @@ -11,54 +12,63 @@ from common.base_handler import BaseHandler |
| from common.base_handler import Permission |
| from model import analysis_status |
| from waterfall.flake import initialize_flake_pipeline |
| +from waterfall.test_info import TestInfo |
| class CheckFlake(BaseHandler): |
| PERMISSION_LEVEL = Permission.ANYONE |
| def HandleGet(self): |
| - master_name = self.request.get('master_name').strip() |
| - builder_name = self.request.get('builder_name').strip() |
| - build_number = int(self.request.get('build_number', '0').strip()) |
| - step_name = self.request.get('step_name').strip() |
| - test_name = self.request.get('test_name').strip() |
| + key = self.request.get('key') |
| + if key: |
| + analysis = ndb.Key(urlsafe=key).get() |
| + if not analysis: # pragma: no cover |
| + return self.CreateError('Analysis of flake is not found', 404) |
| + else: |
| + master_name = self.request.get('master_name').strip() |
| + builder_name = self.request.get('builder_name').strip() |
| + build_number = int(self.request.get('build_number', '0').strip()) |
| + step_name = self.request.get('step_name').strip() |
| + test_name = self.request.get('test_name').strip() |
| - if not (master_name and builder_name and build_number and |
| - step_name and test_name): # pragma: no cover. |
| - return self.CreateError( |
| - 'Invalid value of master/builder/build_number/step/test', 400) |
| + if not (master_name and builder_name and build_number and |
| + step_name and test_name): # pragma: no cover. |
| + return self.CreateError( |
| + 'Invalid value of master/builder/build_number/step/test', 400) |
| - force = (auth_util.IsCurrentUserAdmin() and |
| - self.request.get('force') == '1') |
| - allow_new_analysis = self.IsCorpUserOrAdmin() |
| + force = (auth_util.IsCurrentUserAdmin() and |
| + self.request.get('force') == '1') |
| + allow_new_analysis = self.IsCorpUserOrAdmin() |
| - analysis = initialize_flake_pipeline.ScheduleAnalysisIfNeeded( |
| - master_name, builder_name, build_number, step_name, test_name, |
| - allow_new_analysis, force=force, manually_triggered=True, |
| - queue_name=constants.WATERFALL_ANALYSIS_QUEUE) |
| + test = TestInfo( |
| + master_name, builder_name, build_number, step_name, test_name) |
| + analysis = initialize_flake_pipeline.ScheduleAnalysisIfNeeded( |
| + test, test, allow_new_analysis=allow_new_analysis, force=force, |
|
lijeffrey
2016/10/21 17:10:27
nit: Just so this doesn't look like a typo (becaus
stgao
2016/10/21 22:42:33
Done.
chanli
2016/10/21 23:23:08
So when does the normalization happen? For example
stgao
2016/10/22 00:15:09
The "PRE_" is a TODO on your end; it's up to you w
|
| + manually_triggered=True, |
| + queue_name=constants.WATERFALL_ANALYSIS_QUEUE) |
| - if not analysis: # pragma: no cover. |
| - return { |
| - 'template': 'error.html', |
| - 'data': { |
| - 'error_message': |
| - ('You could schedule an analysis for flaky test only after ' |
| - 'you login with google.com account.'), |
| - 'login_url': self.GetLoginUrl(), |
| - }, |
| - 'return_code': 401, |
| - } |
| + if not analysis: # pragma: no cover. |
| + return { |
| + 'template': 'error.html', |
| + 'data': { |
| + 'error_message': |
| + ('You could schedule an analysis for flaky test only after ' |
| + 'you login with google.com account.'), |
| + 'login_url': self.GetLoginUrl(), |
| + }, |
| + 'return_code': 401, |
| + } |
| data = { |
| 'pass_rates': [], |
| 'analysis_status': analysis.status_description, |
| 'suspected_flake_build_number': ( |
| analysis.suspected_flake_build_number), |
| - 'master_name': master_name, |
| - 'builder_name': builder_name, |
| - 'build_number': build_number, |
| - 'step_name': step_name, |
| - 'test_name': test_name, |
| + 'master_name': analysis.master_name, |
| + 'builder_name': analysis.builder_name, |
| + 'build_number': analysis.build_number, |
| + 'step_name': analysis.step_name, |
| + 'test_name': analysis.test_name, |
| 'request_time': time_util.FormatDatetime( |
| analysis.request_time), |
| 'task_number': len(analysis.data_points), |