获取所有JIRA问题列表(python)

时间:2017-10-02 15:37:55

标签: python jira jira-rest-api

我正在尝试获取所有JIRA问题的列表,以便我可以通过以下方式迭代它们:

from jira import JIRA

jira = JIRA(basic_auth=('username', 'password'), options={'server':'https://MY_JIRA.atlassian.net'})

issue = jira.issue('ISSUE_KEY')
print(issue.fields.project.key) 
print(issue.fields.issuetype.name) 
print(issue.fields.reporter.displayName)
print(issue.fields.summary)
print(issue.fields.comment.comments)

上面的代码返回了所需的字段(但一次只发出一个问题),但是,我需要能够将所有问题密钥的列表传递到:

issue = jira.issue('ISSUE_KEY')

这个想法是编写一个for循环,它将遍历此列表并打印指示的字段。

我无法填写此列表。

有人能指出我正确的方向吗?感谢。

5 个答案:

答案 0 :(得分:2)

您可以执行搜索而不是单个问题get。

假设您的项目密钥为PRO-KEY,要执行搜索,您必须使用此查询:

https://MY_JIRA.atlassian.net/rest/api/2/search?jql=project=PRO-KEY

这将返回PRO-KEY的前50个问题以及字段maxResults中的一个数字。

除了数字,您可以执行其他搜索,添加到上一个查询:

&startAt=50

使用这个新参数,您可以将问题从51提取到100(如果您认为第一个问题为0,则为50到99)。

下一个查询将为&startAt=100,依此类推,直至您获取PRO-KEY中的所有问题。

如果您希望获取超过50个问题,请添加到查询中:

&maxResults=200

答案 1 :(得分:2)

您可以使用jira.search_issues()方法传入JQL查询。它将返回与JQL匹配的问题列表:

issues_in_proj = jira.search_issues('project=PROJ')

这将为您提供可以迭代的问题列表

答案 2 :(得分:2)

从Python3.8开始阅读所有问题可以相对简短而优雅:

    issues = []
    while issues_chunk := jira.search_issues('project=PROJ', startAt=len(issues)):
        issues += list(issue issues_chunk)

(因为我们在每一步都需要 len(issues),所以我们不能使用列表推导式,可以吗?

连同初始化、兑现和“预处理”(例如只取 issue.raw),您可以编写如下内容:

jira = jira.JIRA(
    server="https://jira.at-home.com",
    basic_auth=json.load(open(os.path.expanduser("~/.jira-credentials")))
    validate=True,
)

issues = json.load(open("jira_issues.json"))

while issues_chunk := jira.search_issues('project=PROJ', startAt=len(issues)):
    issues += [issue.raw for issue issues_chunk]
    
json.dump(issues, open("jira_issues.json", "w"))

答案 3 :(得分:1)

def get_all_issues(jira_client, project_name, fields):
    issues = []
    i = 0
    chunk_size = 100
    while True:
        chunk = jira_client.search_issues(f'project = {project_name}', startAt=i, maxResults=chunk_size, fields=fields)
        i += chunk_size
        issues += chunk.iterable
        if i >= chunk.total:
            break
    return issues
issues = get_all_issues(jira, 'JIR', ["id", "fixVersion"])

答案 4 :(得分:0)

options = {'server': 'YOUR SERVER NAME'}
jira = JIRA(options, basic_auth=('YOUR EMAIL', 'YOUR PASSWORD'))
size = 100
initial = 0
while True:
    start= initial*size
    issues = jira.search_issues('project=<NAME OR ID>',  start,size)
    if len(issues) == 0:
        break
    initial += 1
    for issue in issues:
        print 'ticket-no=',issue
        print 'IssueType=',issue.fields.issuetype.name
        print 'Status=',issue.fields.status.name
        print 'Summary=',issue.fields.summary