| OLD | NEW |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 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 """Task queue endpoints for creating and updating issues on issue tracker.""" | 5 """Task queue endpoints for creating and updating issues on issue tracker.""" |
| 6 | 6 |
| 7 import datetime | 7 import datetime |
| 8 import json | 8 import json |
| 9 import logging | 9 import logging |
| 10 import urllib2 | 10 import urllib2 |
| 11 import webapp2 | 11 import webapp2 |
| 12 | 12 |
| 13 from google.appengine.api import app_identity | 13 from google.appengine.api import app_identity |
| 14 from google.appengine.api import taskqueue | 14 from google.appengine.api import taskqueue |
| 15 from google.appengine.api import urlfetch | 15 from google.appengine.api import urlfetch |
| 16 from google.appengine.api import users | 16 from google.appengine.api import users |
| 17 from google.appengine.ext import ndb | 17 from google.appengine.ext import ndb |
| 18 | 18 |
| 19 from apiclient.errors import HttpError |
| 19 import gae_ts_mon | 20 import gae_ts_mon |
| 20 from issue_tracker import issue_tracker_api, issue | 21 from issue_tracker import issue_tracker_api, issue |
| 21 from model.flake import ( | 22 from model.flake import ( |
| 22 Flake, FlakeOccurrence, FlakeUpdate, FlakeUpdateSingleton, FlakyRun) | 23 Flake, FlakeOccurrence, FlakeUpdate, FlakeUpdateSingleton, FlakyRun) |
| 23 from model.build_run import BuildRun | 24 from model.build_run import BuildRun |
| 24 from status import build_result, util | 25 from status import build_result, util |
| 25 from test_results.util import normalize_test_type, flatten_tests_trie | 26 from test_results.util import normalize_test_type, flatten_tests_trie |
| 26 | 27 |
| 27 | 28 |
| 28 MAX_UPDATED_ISSUES_PER_DAY = 10 | 29 MAX_UPDATED_ISSUES_PER_DAY = 10 |
| (...skipping 652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 user_email = users.get_current_user().email() | 682 user_email = users.get_current_user().email() |
| 682 if not user_email.endswith('@chromium.org'): | 683 if not user_email.endswith('@chromium.org'): |
| 683 self.response.set_status(401) | 684 self.response.set_status(401) |
| 684 self.response.write( | 685 self.response.write( |
| 685 'Please login with your chromium.org account. <a href="%s">Logout' | 686 'Please login with your chromium.org account. <a href="%s">Logout' |
| 686 '</a>.' % users.create_logout_url(self.request.url)) | 687 '</a>.' % users.create_logout_url(self.request.url)) |
| 687 return | 688 return |
| 688 | 689 |
| 689 try: | 690 try: |
| 690 issue_id = int(self.request.get('issue_id')) | 691 issue_id = int(self.request.get('issue_id')) |
| 691 except Exception as e: | 692 except (TypeError, ValueError) as e: |
| 692 self.response.set_status(400) | 693 self.response.set_status(400) |
| 693 self.response.write('Failed to parse Issue ID as an integer.') | 694 self.response.write('Failed to parse Issue ID as an integer.') |
| 694 return | 695 return |
| 695 | 696 |
| 696 if issue_id < 0: | 697 if issue_id < 0: |
| 697 self.response.set_status(400) | 698 self.response.set_status(400) |
| 698 self.response.write('Issue ID must be positive or 0.') | 699 self.response.write('Issue ID must be positive or 0.') |
| 699 return | 700 return |
| 700 | 701 |
| 701 if issue_id != 0: | 702 if issue_id != 0: |
| 703 api = issue_tracker_api.IssueTrackerAPI('chromium') |
| 702 try: | 704 try: |
| 703 api = issue_tracker_api.IssueTrackerAPI('chromium', True) | |
| 704 api.getIssue(issue_id) | 705 api.getIssue(issue_id) |
| 705 except Exception as e: | 706 except HttpError as e: |
| 706 self.response.set_status(400) | 707 if e.resp.status != 404: |
| 708 raise |
| 709 self.response.set_status(404) |
| 707 self.response.write( | 710 self.response.write( |
| 708 'Failed to find issue %d on issue tracker: %s.' % (issue_id, e)) | 711 'Failed to find issue %d on issue tracker: %s.' % (issue_id, e)) |
| 709 return | 712 return |
| 710 | 713 |
| 711 key = self.request.get('key') | 714 key = self.request.get('key') |
| 712 flake = ndb.Key(urlsafe=key).get() | 715 flake = ndb.Key(urlsafe=key).get() |
| 713 flake.issue_id = issue_id | 716 flake.issue_id = issue_id |
| 714 flake.put() | 717 flake.put() |
| 715 | 718 |
| 716 logging.info('%s updated issue_id for flake %s to %d.', user_email, | 719 logging.info('%s updated issue_id for flake %s to %d.', user_email, |
| 717 flake.name, issue_id) | 720 flake.name, issue_id) |
| 718 self.redirect('/all_flake_occurrences?key=%s' % key) | 721 self.redirect('/all_flake_occurrences?key=%s' % key) |
| OLD | NEW |