Skip to content

Commit f8e0adc

Browse files
committed
Modify Jira pipeline adding new issue types
1 parent fd6f354 commit f8e0adc

File tree

3 files changed

+102
-2
lines changed

3 files changed

+102
-2
lines changed

__main__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ def main():
8181
if args.report_type == 'jira-qa-requests':
8282
h = JiraClient()
8383
h.jira_qa_requests()
84+
#h.jira_qa_requests_new_issue_types()
8485
if args.report_type == 'jira-qa-needed':
8586
h = JiraClient()
8687
h.jira_qa_needed()

database.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ class ReportGithubIssues(Base):
3838
class ReportJiraQARequests(Base):
3939
__table__ = Table('report_jira_qa_requests', Base.metadata, autoload=True) # noqa
4040

41+
class ReportJIraQARequestsNewIssueType(Base):
42+
__table__ = Table('report_jira_qa_requests_new_issue_types', Base.metadata, autoload=True) # noqa
43+
4144

4245
class ReportJiraQANeeded(Base):
4346
__table__ = Table('report_jira_qa_needed', Base.metadata, autoload=True) # noqa

jira.py

Lines changed: 98 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
from database import (
88
Database,
99
ReportJiraQARequests,
10-
ReportJiraQANeeded
10+
ReportJiraQANeeded,
11+
ReportJIraQARequestsNewIssueType
1112
)
1213
from utils.datetime_utils import DatetimeUtils as dt
1314
from utils.constants import FILTER_ID_ALL_REQUESTS_2022, MAX_RESULT
@@ -18,7 +19,11 @@
1819
STORY_POINTS = "customfield_10037"
1920
FIREFOX_RELEASE_TRAIN = "customfield_10155"
2021
ENGINEERING_TEAM = "customfield_10134"
21-
DEFAULT_COLUMNS = "id,key,status,created,summary,labels,assignee,"
22+
DEFAULT_COLUMNS = "id,key,status,created,summary,labels,assignee"
23+
DEFAULT_COLUMNS_ISSUE_TYPE = "id,key,status,created,summary,labels,assignee,issuetype,parent"
24+
TESTED_TRAINS = "customfield_11930"
25+
26+
NEW_FILTER_ID = "14266"
2227

2328
JQL_QUERY = 'jql=filter='
2429

@@ -45,6 +50,14 @@ def filters(self):
4550

4651
return self.client.get_search(query)
4752

53+
def filters_new_issue_type(self):
54+
query = JQL_QUERY + NEW_FILTER_ID + '&fields=' \
55+
+ DEFAULT_COLUMNS_ISSUE_TYPE + ',' + STORY_POINTS + ',' \
56+
+ FIREFOX_RELEASE_TRAIN + ',' + TESTED_TRAINS + ',' \
57+
+ ENGINEERING_TEAM + '&' + MAX_RESULT
58+
59+
return self.client.get_search(query)
60+
4861
def filter_qa_needed(self):
4962
query = JQL_QUERY + FILTER_ID_QA_NEEDED_iOS + '&' + MAX_RESULT
5063
return self.client.get_search(query)
@@ -67,6 +80,18 @@ def jira_qa_requests(self):
6780

6881
self.db.report_jira_qa_requests_insert(data_frame)
6982

83+
def jira_qa_requests_new_issue_types(self):
84+
payload = self.filters_new_issue_type()
85+
print("This is the payload returning from filter")
86+
print(payload)
87+
88+
self.db.qa_requests_delete()
89+
90+
data_frame = self.db.report_jira_qa_requests__new_issue_types_payload(payload)
91+
print(data_frame)
92+
93+
self.db.report_jira_qa_requests_insert_new_issue_types(data_frame)
94+
7095
def jira_qa_needed(self):
7196
payload = self.filter_qa_needed()
7297
data_frame = self.db.report_jira_qa_needed(payload)
@@ -132,6 +157,56 @@ def report_jira_qa_requests_payload(self, payload):
132157

133158
return df_selected
134159

160+
def report_jira_qa_requests__new_issue_types_payload(self, payload):
161+
# Normalize the JSON data
162+
df = pd.json_normalize(payload, sep='_')
163+
164+
# Check if 'jira_assignee_username' exists
165+
# if not use 'alternative_assignee_emailAddress'
166+
if 'fields_assignee_emailAddress' not in df.columns:
167+
df['fields_assignee_emailAddress'] = df.get('fields_assignee', "None") # noqa
168+
else:
169+
df['fields_assignee_emailAddress'] = df['fields_assignee_emailAddress'].fillna("Not Assigned") # noqa
170+
171+
# Drop the alternative column if it exists
172+
if 'fields_assignee' in df.columns:
173+
df.drop(columns=['fields_assignee'], inplace=True)
174+
175+
# Select specific columns
176+
selected_columns = {
177+
'key': 'jira_key',
178+
'fields_summary': 'jira_summary',
179+
'fields_created': 'jira_created_at',
180+
'fields_customfield_10155_value': 'jira_firefox_release_train',
181+
'fields_customfield_10134_value': 'jira_engineering_team',
182+
'fields_customfield_10037': 'jira_story_points',
183+
'fields_status_name': 'jira_status',
184+
'fields_assignee_emailAddress': 'jira_assignee_username',
185+
'fields_labels': 'jira_labels',
186+
'fields_customfield_11930': 'jira_tested_train',
187+
'fields_issuetype_name':'jira_issue_type',
188+
'fields_parent_key': 'jira_parent_link'
189+
}
190+
191+
# Select specific columns
192+
df_selected = df[selected_columns.keys()]
193+
print(df_selected)
194+
195+
# Rename columns
196+
df_selected = df_selected.rename(columns=selected_columns)
197+
198+
df_selected['jira_created_at'] = df_selected['jira_created_at'].apply(dt.convert_to_utc) # noqa
199+
200+
# Join list of labels into a single string
201+
df_selected['jira_labels'] = df_selected['jira_labels'].apply(lambda x: ','.join(x) if isinstance(x, list) else x) # noqa
202+
203+
# Convert NaN values to 0 and ensure the column is of type int
204+
df_selected['jira_story_points'] = df_selected['jira_story_points'].fillna(0).astype(int) # noqa
205+
206+
df_selected = df_selected.where(pd.notnull(df_selected), None)
207+
208+
return df_selected
209+
135210
def report_jira_qa_requests_insert(self, payload):
136211
print(payload)
137212

@@ -149,6 +224,27 @@ def report_jira_qa_requests_insert(self, payload):
149224
self.session.add(report)
150225
self.session.commit()
151226

227+
def report_jira_qa_requests_insert_new_issue_types(self, payload):
228+
print(payload)
229+
230+
for index, row in payload.iterrows():
231+
print(row)
232+
report = ReportJIraQARequestsNewIssueType(jira_key=row['jira_key'],
233+
jira_created_at=row['jira_created_at'].date(), # noqa
234+
jira_summary=row['jira_summary'], # noqa
235+
jira_firefox_release_train=row['jira_firefox_release_train'], # noqa
236+
jira_engineering_team=row['jira_engineering_team'], # noqa
237+
jira_story_points=row['jira_story_points'], # noqa
238+
jira_status=row['jira_status'], # noqa
239+
jira_assignee_username=row['jira_assignee_username'], # noqa
240+
jira_labels=row['jira_labels'],
241+
jira_tested_train=row['jira_tested_train'],
242+
jira_issue_type=row['jira_issue_type'],
243+
jira_parent_link=row['jira_parent_link']
244+
)
245+
self.session.add(report)
246+
self.session.commit()
247+
152248
def report_jira_qa_needed(self, payload):
153249
# Normalize the JSON data
154250
df = pd.json_normalize(payload, sep='_')

0 commit comments

Comments
 (0)