#!/usr/bin/python
# -*- coding:utf-8 -*-
from jira import JIRA
import sys, getopt, redis, os
class JiraTool:
def __init__( self ):
self .server = ‘https:/jira。example.net‘
self .basic_auth = ( ‘username‘ , ‘password‘ )
self .jiraClinet = None
def login( self ):
self .jiraClinet = JIRA(server = self .server, basic_auth = self .basic_auth)
if self .jiraClinet ! = None :
return True
else :
return False
def findIssueById( self , issueId):
if issueId:
if self .jiraClinet = = None :
self .login()
return self .jiraClinet.issue(issueId)
else :
return ‘Please input your issueId‘
def createIssue( self , description, assignee, project, parent, filepath):
issue_dict = {
‘project‘ : { ‘key‘ : project},
‘issuetype‘ : { ‘name‘ : ‘Sub-Task‘ },
‘parent‘ : { ‘key‘ : parent},
‘summary‘ : ‘[xxx]Auto sync file %s from storage-cnn to storage‘ % (filepath),
‘description‘ : description,
‘assignee‘ : { ‘name‘ : assignee},
‘customfield_12603‘ : { ‘value‘ : ‘xxx‘ },
‘components‘ : [{ ‘name‘ : ‘SCM‘ }],
‘priority‘ : { ‘name‘ : ‘Major‘ },
}
if self .jiraClinet = = None :
self .login()
return self .jiraClinet.create_issue(issue_dict)
if __name__ = = ‘__main__‘ :
redisTool = redis.Redis(host = ‘127.0.0.1‘ , port = 6379 )
jiraTool = JiraTool()
jiraTool.login()
description = ‘‘
assignee = ‘‘
watchers = None
project = ‘‘
parent = ‘‘
openIssuekey = ‘‘
cnnStoragePath = ‘xxxxx‘
opts, args = getopt.getopt(sys.argv[ 1 :], ‘d:a:w:p:o:‘ )
for op, value in opts:
if op = = ‘-d‘ :
filepath = value
elif op = = ‘-a‘ :
user = jiraTool.jiraClinet.search_users(user = value)
if user:
assignee = user[ 0 ].key
else :
print ( ‘Please make sure that the user email is correct!‘ )
sys.exit( - 1 )
elif op = = ‘-p‘ :
if ‘Austin‘ in value:
project = ‘xxxx‘
parent = ‘xxxx‘
cnnStoragePath = os.path.join(cnnStoragePath, ‘xxxx‘ )
elif ‘Ford‘ in value:
project = ‘xxxxx‘
parent = ‘xxxxx‘
cnnStoragePath = os.path.join(cnnStoragePath, ‘xxxxx‘ )
else :
print ( ‘Please make sure that the project is correct!‘ )
sys.exit( - 1 )
elif op = = ‘-w‘ :
watchers = value.split( ‘,‘ )
elif op = = ‘-o‘ :
openIssuekey = value
if not openIssuekey:
print ( ‘Please make sure that the openIssuekey is correct!‘ )
sys.exit( - 1 )
break
try :
if openIssuekey:
issuekeyTmp = redisTool.get(openIssuekey)
issue = jiraTool.findIssueById(issuekeyTmp)
print openIssuekey, ‘----‘ , issuekeyTmp, ‘----‘ , issue.fields.status
if ‘Screen‘ in str (issue.fields.status):
print ‘Update %s status screen ----> open ‘ % (issuekeyTmp)
jiraTool.jiraClinet.transition_issue(issue, 151 )
redisTool.delete(openIssuekey)
else :
print ‘Please make sure the issue status is not screen‘
else :
if not filepath:
print ( ‘Please make sure that the file path is correct!‘ )
sys.exit( - 1 )
if not assignee:
print ( ‘Please make sure that the assignee is correct!‘ )
sys.exit( - 1 )
if not project:
print ( ‘Please make sure that the project is correct!‘ )
sys.exit( - 1 )
print ( ‘Creating issue now‘ )
cnnStoragePath = os.path.join(cnnStoragePath,filepath)
description = ‘[Files to sync]\n‘ + cnnStoragePath
print "cnnStoragePath: " + cnnStoragePath
print "description: " + description
print "assignee: " + assignee
issue = jiraTool.createIssue(description, assignee, project, parent,filepath)
issueKey = issue.key
redisTool. set (filepath, issueKey)
print ( ‘issue key is ---->‘ , issueKey)
if watchers:
for watcherItem in watchers:
watcher = jiraTool.jiraClinet.search_users(user = watcherItem)
if watcher:
watcherKey = watcher[ 0 ].key
jiraTool.jiraClinet.add_watcher(issue = issueKey, watcher = watcherKey)
else :
print ( ‘%s user does not exis‘ % (watcherItem))
jiraTool.jiraClinet.add_comment(issue = issueKey, body = ‘%s user does not exis‘ % (watcherItem))
except Exception as e:
print e
sys.exit( - 1 )
|