How to access the next page using JIRA -REST-API for python

Question:

I am trying to fetch all issues related to a project. When I execute the below code, I get only 50 results. I need to navigate all pages and get all the bugs.Please help

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

This gives me only 50 issues since the page has default value of 50. I need to get all the issues.

Asked By: Rakesh Nittur

||

Answers:

— Update 18/Oct/2021

As discovered in the answer below, setting maxResults to False appears to remove the limit on the result set.

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

— Original Post

Try;

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

The results from the REST API are paged, with the default number of results being 50. You can supply the startAt value to start the results from a point in the result set. By default this value is 0.

So, your original query would get results 0-49, the query above would get results 50-99 and changing startAt to 100 would get 100-149, and so on.

You can also increase the value of maxResults to return more results per page. However, this is limited to the max value of jira.search.views.default.max configured in your JIRA instance (set to 1000 by default).

It is not possible to make the API return all issues without paging. You would have to configure jira.search.views.default.max to a very large value and supply that value as maxResults.

Answered By: JamieB

According to the source code:
https://github.com/pycontribs/jira/blob/f5d7dd032e719fe35f5fc377f302200f6c69afd4/jira/client.py#L2737

Setting maxResults=False should do the trick, so your example would look like:

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

I shortly tested it right now and it worked here.

Answered By: André Düwel

I love André Düwel‘s answer for reasonable result sets.

Just in case there’s a use case where the total number of issues returned is too big to handle, or if you want to process the results in more reasonable chunks, here’s a fetch that I use:

    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
Answered By: Bill Gallagher