blob: 0c6c126999c04ebb21cc3d872b09111cdcf1b48a [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from jira import JIRA
class JiraClient:
def __init__(self, options, basic_auth, project):
self.jira = JIRA(options, basic_auth=basic_auth)
self.project = project
def get_issues_by_summary(self, summary):
"""
Find issues by using the summary (issue title)
Args:
summary
Return:
A list of issues
"""
try:
issues = self.jira.search_issues("project={0} AND summary ~ '{1}'".format(self.project, summary))
except Exception:
raise
return issues
def get_issue_by_key(self, key):
"""
Find issue by using the key (e.g BEAM-1234)
Args:
key
Return:
issue
"""
try:
issue = self.jira.issue(key)
except Exception:
raise
return issue
def create_issue(self, summary, components, description, issuetype='Bug', assignee=None, parent_key=None):
"""
Create a new issue
Args:
summary - Issue title
components - A list of components
description (optional) - A string that describes the issue
issuetype (optional) - Bug, Improvement, New Feature, Sub-task, Task, Wish, etc.
assignee (optional) - A string of JIRA user name
parent_key (optional) - The parent issue key is required when creating a subtask.
Return:
Issue created
"""
fields = {
'project': {'key': self.project},
'summary': summary,
'description': description,
'issuetype': {'name': issuetype},
'components': [],
}
for component in components:
fields['components'].append({'name': component})
if assignee is not None:
fields['assignee'] = {'name': assignee}
if parent_key is not None:
fields['parent'] = {'key': parent_key}
fields['issuetype'] = {'name': 'Sub-task'}
try:
new_issue = self.jira.create_issue(fields = fields)
except Exception:
raise
return new_issue
def update_issue(self, issue, summary=None, components=None, description=None, assignee=None, notify=True):
"""
Create a new issue
Args:
issue - Jira issue object
summary (optional) - Issue title
components (optional) - A list of components
description (optional) - A string that describes the issue
assignee (optional) - A string of JIRA user name
notify - Query parameter notifyUsers. If true send the email with notification that the issue was updated to users that watch it.
Admin or project admin permissions are required to disable the notification.
Return:
Issue created
"""
fields={}
if summary:
fields['summary'] = summary
if description:
fields['description'] = description
if assignee:
fields['assignee'] = {'name': assignee}
if components:
fields['components'] = []
for component in components:
fields['components'].append({'name': component})
try:
issue.update(fields=fields, notify=notify)
except Exception:
raise
def reopen_issue(self, issue):
"""
Reopen an issue
Args:
issue - Jira issue object
"""
try:
self.jira.transition_issue(issue.key, 3)
except:
raise