blob: 933958330686d1f62d562fa72381661917666d96 [file] [log] [blame]
# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from flask import make_response, Blueprint, request
from httplib2 import http
import json
import logging
from application import utils
from application.clients import issue_tracker_client
issues = Blueprint('issues', __name__)
@issues.route('/', methods=['GET'])
@issues.route('/project/<project_name>', methods=['GET'])
@utils.BearerTokenAuthorizer
def IssuesGetHandler(project_name=None):
limit = request.args.get('limit', '2000')
age = request.args.get('age', '3')
status = request.args.get('status', 'open')
labels = request.args.get('labels', '')
client = issue_tracker_client.IssueTrackerClient()
response = client.GetIssuesList(
project=project_name,
q='opened>today-%s' % age,
can=status,
label=labels,
maxResults=limit,
sort='-id')
return make_response(response)
@issues.route('/<issue_id>/project/', methods=['GET'])
@issues.route('/<issue_id>/project/<project_name>', methods=['GET'])
@utils.BearerTokenAuthorizer
def IssuesGetByIdHandler(issue_id, project_name=None):
# add handling before the fix on alert_group_workflow is deployed.
if not project_name:
project_name = 'chromium'
client = issue_tracker_client.IssueTrackerClient()
response = client.GetIssue(
issue_id=issue_id,
project=project_name)
return make_response(response)
@issues.route('/<issue_id>/project/<project_name>/comments', methods=['GET'])
@utils.BearerTokenAuthorizer
def CommentsHandler(issue_id, project_name):
client = issue_tracker_client.IssueTrackerClient()
response = client.GetIssueComments(
issue_id=issue_id,
project=project_name)
return make_response(response)
@issues.route('/', methods=['POST'])
@utils.BearerTokenAuthorizer
def IssuesPostHandler():
try:
data = json.loads(request.data)
except json.JSONDecodeError as e:
return make_response(str(e), http.HTTPStatus.BAD_REQUEST.value)
client = issue_tracker_client.IssueTrackerClient()
response = client.NewIssue(**data)
return make_response(response)
@issues.route('/<issue_id>/project/<project_name>/comments', methods=['POST'])
@utils.BearerTokenAuthorizer
def CommentsPostHandler(issue_id, project_name):
try:
data = json.loads(request.data)
except json.JSONDecodeError as e:
return make_response(str(e), http.HTTPStatus.BAD_REQUEST.value)
client = issue_tracker_client.IssueTrackerClient()
response = client.NewComment(
issue_id=int(issue_id),
project=project_name,
**data
)
return make_response(response)