1
1
import os
2
2
import sys
3
3
4
+ import pandas as pd
5
+
4
6
from lib .jira_conn import JiraAPIClient
7
+ from database import (
8
+ Database ,
9
+ ReportJiraQARequests
10
+ )
11
+ from utils .datetime_utils import DatetimeUtils as dt
12
+ from utils .constants import FILTER_ID_ALL_REQUESTS_2022 , MAX_RESULT
5
13
6
14
7
15
# JQL query All QA Requests since 2022 filter_id: 13856
8
- FILTER_ID_ALL_REQUESTS_2022 = "13856"
9
- # Fields needed
16
+ # Extra fields needed
10
17
STORY_POINTS = "customfield_10037"
11
18
FIREFOX_RELEASE_TRAIN = "customfield_10155"
12
19
ENGINEERING_TEAM = "customfield_10134"
13
20
DEFAULT_COLUMNS = "id,key,status,created,summary,labels,assignee,"
14
- MAX_RESULT = "maxResults=100"
15
21
16
22
JQL_QUERY = 'jql=filter='
17
23
@@ -32,6 +38,101 @@ def __init__(self):
32
38
# API: Filters
33
39
def filters (self ):
34
40
query = JQL_QUERY + FILTER_ID_ALL_REQUESTS_2022 + '&fields=' \
35
- + DEFAULT_COLUMNS + STORY_POINTS + FIREFOX_RELEASE_TRAIN \
41
+ + DEFAULT_COLUMNS + ',' + STORY_POINTS + ',' \
42
+ + FIREFOX_RELEASE_TRAIN + ',' \
36
43
+ ENGINEERING_TEAM + '&' + MAX_RESULT
44
+
37
45
return self .client .get_search (query )
46
+
47
+
48
+ class JiraClient (Jira ):
49
+ def __init__ (self ):
50
+ super ().__init__ ()
51
+ self .db = DatabaseJira ()
52
+
53
+ def jira_qa_requests (self ):
54
+ payload = self .filters ()
55
+ print ("This is the payload returning from filter" )
56
+ print (payload )
57
+
58
+ self .db .qa_requests_delete ()
59
+
60
+ data_frame = self .db .report_jira_qa_requests_payload (payload )
61
+ print (data_frame )
62
+
63
+ self .db .report_jira_qa_requests_insert (data_frame )
64
+
65
+
66
+ class DatabaseJira (Database ):
67
+
68
+ def __init__ (self ):
69
+ super ().__init__ ()
70
+ self .db = Database ()
71
+
72
+ def qa_requests_delete (self ):
73
+ """ Wipe out all test suite data.
74
+ NOTE: we'll renew this data from Testrail every session."""
75
+ print ("Delete entries from db first" )
76
+ self .session .query (ReportJiraQARequests ).delete ()
77
+ self .session .commit ()
78
+
79
+ def report_jira_qa_requests_payload (self , payload ):
80
+ # Normalize the JSON data
81
+ df = pd .json_normalize (payload , sep = '_' )
82
+
83
+ # Check if 'jira_assignee_username' exists
84
+ # if not use 'alternative_assignee_emailAddress'
85
+ if 'fields_assignee_emailAddress' not in df .columns :
86
+ df ['fields_assignee_emailAddress' ] = df .get ('fields_assignee' , "None" ) # noqa
87
+ else :
88
+ df ['fields_assignee_emailAddress' ] = df ['fields_assignee_emailAddress' ].fillna ("Not Assigned" ) # noqa
89
+
90
+ # Drop the alternative column if it exists
91
+ if 'fields_assignee' in df .columns :
92
+ df .drop (columns = ['fields_assignee' ], inplace = True )
93
+
94
+ # Select specific columns
95
+ selected_columns = {
96
+ 'key' : 'jira_key' ,
97
+ 'fields_summary' : 'jira_summary' ,
98
+ 'fields_created' : 'jira_created_at' ,
99
+ 'fields_customfield_10155_value' : 'jira_firefox_release_train' ,
100
+ 'fields_customfield_10134_value' : 'jira_engineering_team' ,
101
+ 'fields_customfield_10037' : 'jira_story_points' ,
102
+ 'fields_status_name' : 'jira_status' ,
103
+ 'fields_assignee_emailAddress' : 'jira_assignee_username' ,
104
+ 'fields_labels' : 'jira_labels'
105
+ }
106
+
107
+ # Select specific columns
108
+ df_selected = df [selected_columns .keys ()]
109
+
110
+ # Rename columns
111
+ df_selected = df_selected .rename (columns = selected_columns )
112
+
113
+ df_selected ['jira_created_at' ] = df_selected ['jira_created_at' ].apply (dt .convert_to_utc ) # noqa
114
+
115
+ # Join list of labels into a single string
116
+ df_selected ['jira_labels' ] = df_selected ['jira_labels' ].apply (lambda x : ',' .join (x ) if isinstance (x , list ) else x ) # noqa
117
+
118
+ # Convert NaN values to 0 and ensure the column is of type int
119
+ df_selected ['jira_story_points' ] = df_selected ['jira_story_points' ].fillna (0 ).astype (int ) # noqa
120
+
121
+ return df_selected
122
+
123
+ def report_jira_qa_requests_insert (self , payload ):
124
+ print (payload )
125
+
126
+ for index , row in payload .iterrows ():
127
+ print (row )
128
+ report = ReportJiraQARequests (jira_key = row ['jira_key' ],
129
+ jira_created_at = row ['jira_created_at' ].date (), # noqa
130
+ jira_summary = row ['jira_summary' ], # noqa
131
+ jira_firefox_release_train = row ['jira_firefox_release_train' ], # noqa
132
+ jira_engineering_team = row ['jira_engineering_team' ], # noqa
133
+ jira_story_points = row ['jira_story_points' ], # noqa
134
+ jira_status = row ['jira_status' ], # noqa
135
+ jira_assignee_username = row ['jira_assignee_username' ], # noqa
136
+ jira_labels = row ['jira_labels' ])
137
+ self .session .add (report )
138
+ self .session .commit ()
0 commit comments