Unverified Commit 083b9b57 authored by Tamika Tannis's avatar Tamika Tannis Committed by GitHub

feat: Configure JIRA Issue Labels (#464)

* Allow configuration of jira issue labels

* Fix UI when there are multiple issues

* Type fix
parent 60175848
import os
from typing import Callable, Dict, Optional, Set # noqa: F401
from typing import Callable, Dict, List, Optional, Set # noqa: F401
from amundsen_application.models.user import User
from flask import Flask # noqa: F401
......@@ -49,6 +49,7 @@ class Config:
INIT_CUSTOM_ROUTES = None # type: Callable[[Flask], None]
# Settings for Issue tracker integration
ISSUE_LABELS = [] # type: List[str]
ISSUE_TRACKER_URL = None # type: str
ISSUE_TRACKER_USER = None # type: str
ISSUE_TRACKER_PASSWORD = None # type: str
......
......@@ -29,10 +29,12 @@ def get_issue_tracker_client() -> BaseIssueTrackerClient:
password = app.config['ISSUE_TRACKER_PASSWORD']
project_id = app.config['ISSUE_TRACKER_PROJECT_ID']
max_results = app.config['ISSUE_TRACKER_MAX_RESULTS']
issue_labels = app.config['ISSUE_LABELS']
if app.config['ISSUE_TRACKER_CLIENT']:
client = import_string(app.config['ISSUE_TRACKER_CLIENT'])
_issue_tracker_client = client(issue_tracker_url=url,
_issue_tracker_client = client(issue_labels=issue_labels,
issue_tracker_url=url,
issue_tracker_user=user,
issue_tracker_password=password,
issue_tracker_project_id=project_id,
......
......@@ -19,11 +19,13 @@ ISSUE_TYPE_NAME = 'Bug'
class JiraClient(BaseIssueTrackerClient):
def __init__(self, issue_tracker_url: str,
def __init__(self, issue_labels: List[str],
issue_tracker_url: str,
issue_tracker_user: str,
issue_tracker_password: str,
issue_tracker_project_id: int,
issue_tracker_max_results: int) -> None:
self.issue_labels = issue_labels
self.jira_url = issue_tracker_url
self.jira_user = issue_tracker_user
self.jira_password = issue_tracker_password
......@@ -83,7 +85,8 @@ class JiraClient(BaseIssueTrackerClient):
}, issuetype={
'id': ISSUE_TYPE_ID,
'name': ISSUE_TYPE_NAME,
}, summary=title,
}, labels=self.issue_labels,
summary=title,
description=(f'{description} '
f'\n Reported By: {user_email} '
f'\n Table Key: {table_uri} [PLEASE DO NOT REMOVE]'),
......
@import 'variables';
.table-issues {
margin-bottom: $spacer-1;
.issue-banner {
height: 40px;
margin: 8px 0;
padding: 8px;
padding: $spacer-1;
display: flex;
flex-direction: row;
border-top: 1px solid $stroke-light;
border-bottom: 1px solid $stroke-light;
color: $text-secondary;
&:last-child {
border-bottom: 1px solid $stroke-light;
}
> :not(.table-issue-priority) {
line-height: 24px;
}
}
.table-issue-link {
margin-right: $spacer-1;
......
......@@ -45,7 +45,8 @@ class JiraClientTest(unittest.TestCase):
with app.test_request_context():
try:
JiraClient(issue_tracker_url='',
JiraClient(issue_labels=[],
issue_tracker_url='',
issue_tracker_user='',
issue_tracker_password='',
issue_tracker_project_id=-1,
......@@ -64,7 +65,8 @@ class JiraClientTest(unittest.TestCase):
mock_remaining_issues.return_value = 0
with app.test_request_context():
try:
jira_client = JiraClient(issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
jira_client = JiraClient(issue_labels=[],
issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
issue_tracker_user=app.config['ISSUE_TRACKER_USER'],
issue_tracker_password=app.config['ISSUE_TRACKER_PASSWORD'],
issue_tracker_project_id=app.config['ISSUE_TRACKER_PROJECT_ID'],
......@@ -91,7 +93,8 @@ class JiraClientTest(unittest.TestCase):
mock_get_url.return_value = 'url'
mock_sort_issues.return_value = [self.mock_issue]
with app.test_request_context():
jira_client = JiraClient(issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
jira_client = JiraClient(issue_labels=[],
issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
issue_tracker_user=app.config['ISSUE_TRACKER_USER'],
issue_tracker_password=app.config['ISSUE_TRACKER_PASSWORD'],
issue_tracker_project_id=app.config['ISSUE_TRACKER_PROJECT_ID'],
......@@ -109,7 +112,8 @@ class JiraClientTest(unittest.TestCase):
def test__generate_all_issues_url(self, mock_url_lib: Mock, mock_JIRA_client: Mock) -> None:
mock_url_lib.return_value = 'test'
with app.test_request_context():
jira_client = JiraClient(issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
jira_client = JiraClient(issue_labels=[],
issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
issue_tracker_user=app.config['ISSUE_TRACKER_USER'],
issue_tracker_password=app.config['ISSUE_TRACKER_PASSWORD'],
issue_tracker_project_id=app.config['ISSUE_TRACKER_PROJECT_ID'],
......@@ -121,7 +125,8 @@ class JiraClientTest(unittest.TestCase):
@unittest.mock.patch('amundsen_application.proxy.issue_tracker_clients.jira_client.JIRA')
def test__generate_all_issues_url_no_issues(self, mock_JIRA_client: Mock) -> None:
with app.test_request_context():
jira_client = JiraClient(issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
jira_client = JiraClient(issue_labels=[],
issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
issue_tracker_user=app.config['ISSUE_TRACKER_USER'],
issue_tracker_password=app.config['ISSUE_TRACKER_PASSWORD'],
issue_tracker_project_id=app.config['ISSUE_TRACKER_PROJECT_ID'],
......@@ -136,7 +141,8 @@ class JiraClientTest(unittest.TestCase):
mock_JIRA_client.return_value.create_issue.side_effect = JIRAError('Some exception')
with app.test_request_context():
try:
jira_client = JiraClient(issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
jira_client = JiraClient(issue_labels=[],
issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
issue_tracker_user=app.config['ISSUE_TRACKER_USER'],
issue_tracker_password=app.config['ISSUE_TRACKER_PASSWORD'],
issue_tracker_project_id=app.config['ISSUE_TRACKER_PROJECT_ID'],
......@@ -152,8 +158,10 @@ class JiraClientTest(unittest.TestCase):
def test_create_issue(self, mock_get_issue_properties: Mock, mock_JIRA_client: Mock) -> None:
mock_JIRA_client.return_value.create_issue.return_value = self.mock_issue
mock_get_issue_properties.return_value = self.mock_issue_instance
mock_labels = ['mock-label']
with app.test_request_context():
jira_client = JiraClient(issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
jira_client = JiraClient(issue_labels=mock_labels,
issue_tracker_url=app.config['ISSUE_TRACKER_URL'],
issue_tracker_user=app.config['ISSUE_TRACKER_USER'],
issue_tracker_password=app.config['ISSUE_TRACKER_PASSWORD'],
issue_tracker_project_id=app.config['ISSUE_TRACKER_PROJECT_ID'],
......@@ -166,7 +174,8 @@ class JiraClientTest(unittest.TestCase):
}, issuetype={
'id': 1,
'name': 'Bug',
}, summary='title',
}, labels=mock_labels,
summary='title',
description='desc' + ' \n Reported By: test@email.com' +
' \n Table Key: ' + 'key [PLEASE DO NOT REMOVE]',
reporter={'name': 'test'}))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment