如何使用 JIRA -REST-API for python 访问下一页

问题描述 投票:0回答:3

我正在尝试获取与项目相关的所有问题。当我执行下面的代码时,我只得到 50 个结果。我需要浏览所有页面并找出所有错误。请帮助

all_issues = jira.search_issues('project=ProjectName')
    each_issue = sorted([issue.key for issue in all_issues])
    for item in each_issue:
        print item

这只给我 50 个问题,因为页面的默认值为 50。我需要得到所有的问题。

python jira jira-plugin jira-rest-api python-jira
3个回答
8
投票

-- 2021 年 10 月 18 日更新

正如在下面的answer中所发现的那样,将 maxResults 设置为 False 似乎可以消除对结果集的限制。

all_issues = jira.search_issues('project=ProjectName', maxResults=False)

-- 原帖

尝试;

all_issues = jira.search_issues('project=ProjectName', maxResults=50, startAt=50)

来自 REST API 的结果是分页的,默认结果数为 50。您可以提供

startAt
值以从结果集中的一个点开始结果。默认情况下,此值为 0.

因此,您的原始查询将获得结果 0-49,上面的查询将获得结果 50-99,将

startAt
更改为 100 将获得 100-149,依此类推。

您还可以增加

maxResults
的值以每页返回更多结果。但是,这仅限于在您的 JIRA 实例中配置的
jira.search.views.default.max
的最大值(默认设置为 1000)。

没有分页,是不可能让API返回所有issue的。您必须将

jira.search.views.default.max
配置为一个非常大的值,并将该值作为
maxResults
.

提供

2
投票

根据源码: https://github.com/pycontribs/jira/blob/f5d7dd032e719fe35f5fc377f302200f6c69afd4/jira/client.py#L2737

Setting

maxResults=False
应该可以解决问题,因此您的示例如下所示:

all_issues = jira.search_issues('project=ProjectName', maxResults=False)
    each_issue = sorted([issue.key for issue in all_issues])
    for item in each_issue:
        print item

我现在对它进行了简短的测试,它在这里工作。


0
投票

我喜欢 André Düwel 对合理结果集的回答。

以防万一返回的问题总数太大而无法处理,或者如果您想以更合理的块处理结果,这是我使用的

fetch

    def fetch_jql(jc, jql, limit=0, page_size=50, fields=None, expand=None):
        """ fetches a list of JIRA.issues found in the JQL. Handles JIRA pagination
        :param jc: jira_client
        :param jql: query to search for
        :param limit: max results to find, 0 finds all
        :param page_size: jira pagination setting (max=100, def=50)
        :param fields: fields to search for, if None then get everything
        :param expand: usually just the changelog, if None get everything
        :return: list of issues as JIRA Resources
        """
        if limit != 0 and limit < page_size:
            page_size = limit
        response = list()
        index = 0
        while True:
            issues = jc.search_issues(jql, startAt=index, maxResults=page_size, fields=fields, expand=expand)
            if len(issues) == 0:
                break
            index += len(issues)
            response += issues
            if limit != 0 and limit <= index:
                break
        return response
© www.soinside.com 2019 - 2024. All rights reserved.