1

以下のように、課題検索コンテンツに関する情報を収集する別の可能性はありますか?

私の最初の試みは:

for i in jira.search_issues('filter=filterID', startAt=0, maxResults=2500):
    print(i.fields.duedate)

インデックスiは課題名に似ています (例: JIR-001)。カウントiすると、正確に 1000 が返されました。したがって、プラグインはそれ以上の問題を返すことはできないと思いますが、私の JIRA には、そのフィルター ID に関連する問題がはるかに多くあります (2500 を選択したのはそのためです)。startAtmaxResultsが次の 1000 件の結果 ( ) にシフトされる別のループを追加せずに、さらに取得する方法はありstartAt=1000, maxResults=1999ますか? これにより、スクリプトの実行時間が劇的に増加するため、search.issueアクセスには約 9 秒かかります。

その問題にはもっと簡単な方法があるかもしれませんが、パッケージのドキュメントはその特定の問題についてほとんど書かれていません。

4

1 に答える 1

1

関数のソース コードを確認してみるのも面白いかもしれませんjira.search_issues()

バージョン 1.0.3 のソース コードは次のとおりです。

def search_issues(self, jql_str, startAt=0, maxResults=50, validate_query=True, fields=None, expand=None,
                  json_result=None):
    """
    Get a ResultList of issue Resources matching a JQL search string.

    :param jql_str: the JQL search string to use
    :param startAt: index of the first issue to return
    :param maxResults: maximum number of issues to return. Total number of results
        is available in the ``total`` attribute of the returned ResultList.
        If maxResults evaluates as False, it will try to get all issues in batches of 50.
    :param fields: comma-separated string of issue fields to include in the results
    :param expand: extra information to fetch inside each resource
    """
    # TODO what to do about the expand, which isn't related to the issues?
    infinite = False
    maxi = 50
    idx = 0
    if fields is None:
        fields = []

    # If None is passed as parameter, this fetch all issues from the query
    if not maxResults:
        maxResults = maxi
        infinite = True

    search_params = {
        "jql": jql_str,
        "startAt": startAt,
        "maxResults": maxResults,
        "validateQuery": validate_query,
        "fields": fields,
        "expand": expand
    }
    if json_result:
        return self._get_json('search', params=search_params)

    resource = self._get_json('search', params=search_params)
    issues = [Issue(self._options, self._session, raw_issue_json)
              for raw_issue_json in resource['issues']]
    cnt = len(issues)
    total = resource['total']
    if infinite:
        while cnt == maxi:
            idx += maxi
            search_params["startAt"] = idx
            resource = self._get_json('search', params=search_params)
            issue_batch = [Issue(self._options, self._session, raw_issue_json) for raw_issue_json in
                           resource['issues']]
            issues.extend(issue_batch)
            cnt = len(issue_batch)
    return ResultList(issues, total)

興味深いコメントがあります:

結果の総数totalは、返された ResultList の属性で使用できます。

ですので、チェックしてみるといいかもしれません。

設定することもできますmaxResults = False

ドキュメンテーション:

maxResults が False と評価された場合、すべての問題をバッチで取得しようとします。

于 2016-03-11T10:44:41.840 に答える