from jira import JIRA
import pylightxl as xl
from datetime import date, datetime, time
import time
from openpyxl import load_workbook
jira = JIRA( server='jira ip地址', basic_auth=('xiaohu', 'xiaohu1') )
"""
檢查需求及子任務字段是否完整
"""
def check():
issues_list = readdata()
for row in issues_list :
if row[1]== '子任務-程序開發' or row[1] == '子任務-程序測試':
if row[1]=='' or row[2]==''or row[3]=='' or row[6]==''or row[7]=='' or row[8]=='' or row[10]=='':
return("子任務必填字段為空%s"%row)
if row[1]== '需求':
if row[1]=='' or row[2]==''or row[3]=='' or row[4]=='' or row[5]==''or row[6]==''or row[8]=='' or row[9]=='' or row[10]=='':
return("需求必填字段為空%s" %row)
"""
讀取數據
"""
def readdata() :
db = xl.readxl( fn='jiraIssues_bdc.xlsx' )
listdata = [ ]
for sheet in db.ws_names :
first_row = True
for row in db.ws( sheet ).rows :
if not first_row :
if len( row ) == 0 : # 空行跳過
continue
row = row [ :13 ] # 取前13列
listdata.append( row )
else :
first_row = False
return listdata
"""
日期處理
"""
def jsondate(obj) :
if type( obj ) is int :
# 對日期是整數型特殊處理
t0 = datetime.datetime( year=1900, month=1, day=1 )
delta = datetime.timedelta( days=obj )
obj = (t0 + delta).strftime( '%Y-%m-%d' )
return obj
"""
需求字段組裝
"""
def storyAssembly(row) :
row [ 8 ] = jsondate( row [ 8 ] ) # 處理日期
dict_story = {
'project' : row [ 0 ],
'issuetype' : { 'name' : '產品需求&用戶故事&新功能' }, # 類型
'summary' : row [ 2 ], # 概要
'description' : row [ 3 ], # 描述
'customfield_10604' : { 'value' : row [ 4 ] }, # 關聯項目
'components' : [ { 'name' : row [ 5 ] } ], # 模塊
'fixVersions' : [ { 'name' : row [ 6 ] } ], # 修復的版本
'duedate' : row [ 8 ], # 到期日
'reporter' : { 'name' : row [ 9 ] }, # 報告人
}
return dict_story
"""
子任務(開發/測試)字段組裝
"""
# 父任務工作項
parentId = ' '
def subTaskAssembly(row, parentId) :
row [ 8 ] = jsondate( row [ 8 ] ) # 處理日期
row [ 7 ] = row [ 7 ]*8 #傳入天改為小時
subTask_dict = {
'project' : { 'key' : row [ 0 ] }, # 項目
'issuetype' : { 'name' : row [ 1 ] }, # 類型
'summary' : row [ 2 ], # 概要
'description' : row [ 3 ], # 描述
"timetracking" : { "remainingEstimate" : row [ 7 ] }, # 初始預
'duedate' : row [ 8 ], # 到期日
'parent' : { 'key' : parentId }, # 父任務
}
return subTask_dict
"""
創建任務或者需求
"""
def creatsubTask() :
#檢查需求及子任務必填字段
check()
#創建需求及子任務
i, j, z = 0, 0, 1
issue_dict = { }
issues_list = readdata()
wb = load_workbook( "jiraIssues_bdc.xlsx" ) #建立任務模板,為excle格式
wa = wb.active
for row in issues_list :
z=z+1
if row [ 1 ] == '需求' :
i += 1
issue_dict = storyAssembly( row )
parentIds = jira.create_issue( issue_dict )
parentId=str(parentIds)
jira.assign_issue(parentId, row [ 10 ] )
testLink="http://atu-project.crv.com.cn:8080/browse/" + parentId
wa.cell(z,13,testLink)
print( '創建第', i, '個需求%s' % parentId )
if row [ 1 ] == '子任務-程序開發' or row [ 1 ] == '子任務-程序測試' :
j += 1
issue_dict = subTaskAssembly( row, parentId )
subTaskIds = jira.create_issue(issue_dict )
subTaskId=str(subTaskIds)
jira.assign_issue(subTaskId,row[10]) #分配任務
print( '創建第', j, '個子任務%s'%subTaskId )
wa.cell(z,12,parentId) #取子任務對應的父任務寫入對應的表格
testLink="http://atu-project.crv.com.cn:8080/browse/" + subTaskId #拼接新建任務連接
wa.cell( z, 13,testLink) #連接寫入表格
#已寫入創建的jira工作項
nameTime = str( time.strftime( '%Y-%m-%d_%H-%M-%S' ) )
excelName = 'jiraIssues' + nameTime + '.xlsx'
wb.save(excelName) #回寫任務編號,將建立的任務編號寫入模板
if __name__ == '__main__' :
creatsubTask()