python 操作jira

参考资料:

Welcome to Atlassian Python API’s documentation! — Atlassian Python API 3.29.0 documentationicon-default.png?t=M85Bhttps://atlassian-python-api.readthedocs.io/index.html

Python操作Jira库常用方法解析_Python-考高分网Python操作Jira库常用方法解析Jira提供了完善的RESTful API,如果不想直接请求API接口可以使用Python的Jira库来操作JiraJira Python文档安装方法pip install jira认证Jira的访问是有权限的,在访问Jira项目时首http://www.kaotop.com/it/20025.html 

Jira REST API exampleshttps://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/ 

代码如下:


# -*- coding: utf-8 -*-
import requests
import json
import base64
from requests.exceptions import ConnectionError
import sys
reload(sys)
sys.setdefaultencoding("utf8")


class JiraRestAPI(object):
    # CREATE_META = "{}/rest/api/2/issue/createmeta"  # JIRA_SERVER
    USER_LIST_URL = "{}/rest/api/2/group/member"  # JIRA_SERVER
    PORJECT_LIST_URL = "{}/rest/api/2/project"  # JIRA_SERVER
    ISSUETYPE_URL = "{}/rest/api/2/issue/createmeta/{}/issuetypes"  # JIRA_SERVER, projectIdOrKey
    CREATE_ISSUE_URL = "{}/rest/api/2/issue/"  # JIRA_SERVER

    # testing
    SPECIAL_URL = "{}/rest/api/2/issue/createmeta/{}/issuetypes/{}"  # JIRA_SERVER, projectIdOrKey, issueTypeId
    LIST_PROJECT_ISSUETYPES_URL = "{}/jira/rest/api/2/issue/createmeta/{}/issuetypes?startAt=0&maxResults=50"  # JIRA_SERVER, projectIdOrKey
    GET_ISSUE_URL = "{}/rest/api/latest/issue/{}"  # JIRA_SERVER, issueIdOrKey
    CREATEMETA_URL = "{}/rest/api/2/issue/createmeta"  # JIRA_SERVER


class JiraTool(object):
    def __init__(self, server_addr, username=None, passwd=None, access_token=None):
        self.server_addr = server_addr
        self.username = username
        self.passwd = passwd
        self.access_token = access_token if access_token else None

    def request_jira_reseapi(self, url, method="GET", payload=None):
        try:
            headers = {'Content-Type': 'application/json'}
            if self.access_token is not None:
                headers.update({'Authorization': 'Bearer {}'.format(self.access_token)})
            else:
                auth_base64 = base64.b64encode(self.username + ':' + self.passwd)
                headers.update({'Authorization': 'Basic {}'.format(auth_base64)})

            payload = json.dumps(payload) if payload else {}
            response = requests.request(method, url, headers=headers, data=payload, timeout=10)
            print(response, response.text)
            return response.status_code, response.json()
        # except ConnectionError:
        #     return 500, {}
        except:
            return 500, {}

    def get_jira_user_list(self):
        """only admin user"""
        jira_api = JiraRestAPI.USER_LIST_URL.format(self.server_addr)
        return self.request_jira_reseapi(jira_api, "GET")

    def get_projects_list(self):
        jira_api = JiraRestAPI.PORJECT_LIST_URL.format(self.server_addr)
        return self.request_jira_reseapi(jira_api, "GET")

    def get_special_data(self, projectIdOrKey, issueTypeId):
        jira_api = JiraRestAPI.SPECIAL_URL.format(self.server_addr, projectIdOrKey, issueTypeId)
        return self.request_jira_reseapi(jira_api, "GET")

    def list_project_issuetypes_data(self, projectIdOrKey):
        jira_api = JiraRestAPI.LIST_PROJECT_ISSUETYPES_URL.format(self.server_addr, projectIdOrKey)
        return self.request_jira_reseapi(jira_api, "GET")

    def get_issuetypes(self, projectIdOrKey):
        jira_api = JiraRestAPI.ISSUETYPE_URL.format(self.server_addr, projectIdOrKey)
        return self.request_jira_reseapi(jira_api, "GET")

    def create_issue(self, payload):
        jira_api = JiraRestAPI.CREATE_ISSUE_URL.format(self.server_addr)
        return self.request_jira_reseapi(jira_api, "POST", payload)

    def get_issue_by_id(self, issue_id):
        """"test"""
        jira_api = JiraRestAPI.GET_ISSUE_URL.format(self.server_addr, issue_id)
        return self.request_jira_reseapi(jira_api, 'GET')

    def create_meta(self):
        """test"""
        jira_api = JiraRestAPI.CREATEMETA_URL.format(self.server_addr)
        return self.request_jira_reseapi(jira_api, 'GET')


if __name__ == "__main__":
    pass
    # server_addr, username, passwd, access_token = 'http://192.168.1.1:8080', 'xuezhangjun', 'Admin123..', 'NjU5Nzc1MjY4NTU4OnPMAI3giaU3fILqRDEKc+p7jDV4'

    # jira_tool = JiraTool(server_addr, username, passwd, access_token)

    # projects # no version diff
    # status_code, projects = jira_tool.get_projects_list()
    # print(projects)
    # for project in projects:
    #     print('project: id = {} | key = {} | name = {}'.format(
    #         project.get('id'), project.get('key'), project.get('name')))

    # users # only admin | no version diff | need group name
    # users = jira_tool.get_jira_user_list()
    # print(users)

    # issuetypes # version >= 8.4
    # status_code, issuetypes = jira_tool.get_issuetypes("DEV")
    # print(issuetypes)

    # issuetypes # version < 8.4
    # code, res = jira_tool.create_meta()
    # print(res)

    # for data in issuetypes.get('values', []):
    #     id = data.get('id')
    #     name = data.get('name')
    #     print('issuetype: name = {}, id = {}'.format(name, id))
    #
    # payload = {  # >= 8.4
    #     "fields":
    #         {
    #             "project": {"id": "10002"},
    #             "summary": "REST ye merry gentlemen.",  # title
    #             "issuetype": {"id": "10002"},
    #             "description": "@@@@@ ------ qwertyuiopasdfghjklzxcvbnm"
    #         }
    # }

    # payload = {  # < 8.4
    #     "fields":
    #         {
    #             "project": {"id": "10000"},
    #             "summary": "old jira test",  # title
    #             "issuetype": {"id": "10003"},
    #             "description": "@@@@@ ------ qwertyuiopasdfghjklzxcvbnm"
    #         }
    # }
    # result = jira_tool.create_issue(payload)
    # print(result)

    # result = jira_tool.get_issue_by_id('RDC-5952')
    # print(result)

    # code, res = jira_tool.create_meta()
    # for data in res:
    #     print()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值