Получить дату начала и дату окончания спринта JIRA с помощью библиотеки python JIRA

Есть ли способ получить дату начала и окончания спринта в JIRA с помощью библиотеки python JIRA? Я могу получить jira.client.ResultList со всеми спринтами на интересующей доске, используя jira.sprints(jira.boards()[<sequence number of the board of interest>].id). Список выглядит так:

[<JIRA Sprint: name='LSD Sprint 1', id=1>,
...
<JIRA Sprint: name='LSD Sprint 14', id=14>]

Могу ли я каким-то образом получить доступ к дате начала и окончания каждого спринта, используя что-то похожее на issue.fields, которое возвращает мне jira.resources.PropertyHolder, из которого я могу получить доступ к дополнительным данным?


person Mario Christov    schedule 22.08.2017    source источник
comment
Я знаю, что это для Python, но в bash вы можете получить его с помощью этого скрипта: stackoverflow.com/a/60378905/1499296   -  person AKS    schedule 24.02.2020


Ответы (3)


Для тестирования я использовал jirashell (python-jira 1.0.10), JIRA 6.3.11, JIRA 7.2.3, JIRA AGILE REST API v1.0. Я запустил следующий код в jirashell:

dir(jira.sprints(jira.boards()[0].id)[0])

Он выводит все методы и атрибуты объекта sprint:

['AGILE_BASE_REST_PATH',
 'AGILE_BASE_URL',
 'AGILE_EXPERIMENTAL_REST_PATH',
 'GREENHOPPER_REST_PATH',
 'JIRA_BASE_URL',
 '_READABLE_IDS',
 '__class__',
 '__delattr__',
 '__dict__',
 '__doc__',
 '__format__',
 '__getattr__',
 '__getattribute__',
 '__hash__',
 '__init__',
 '__module__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
 '_base_url',
 '_default_headers',
 '_get_url',
 '_load',
 '_options',
 '_parse_raw',
 '_resource',
 '_session',
 'delete',
 'find',
 'id',
 'linkedPagesCount',
 'name',
 'raw',
 'self',
 'sequence',
 'state',
 'update']

Как видите, в списке нет атрибутов startDate или endDate. Тем не менее, быстрый поиск в Google для спринта Свойства startDate и endDate через JIRA REST API показали, что API ДЕЙСТВИТЕЛЬНО поддерживает такие свойства. Но оказалось, что python-jira использует старую версию JIRA AGILE REST API. Например, когда я запускаю jira.sprints(jira.boards()[0].id)[0].self, в результате я получаю https://[JIRA_URL]/rest/greenhopper/1.0/sprint/[ID] (а не agile/1.0, как упоминалось в ответе, где API поддерживает свойства startDate и endDate). Также python-jira выдает сообщение Old private GreenHopper API is used, all parameters will be ignored.

Итак, я предполагаю, что невозможно получить startDate и endDate с помощью python-jira из-за старой версии JIRA AGILE API, которую он использует.

person altern    schedule 22.08.2017
comment
Теперь можно использовать путь покоя agile в качестве опции: jira = JIRA("https://myjira.com", auth=(user, password), options={"agile_rest_path": GreenHopperResource.AGILE_BASE_REST_PATH}) Подробнее см. jira.resources.GreenHopperResource. - person Powerswitch; 27.10.2019

Использовать sprint_info(board_id, sprint_id)

Это вернет информацию о спринте. Я хотел, чтобы дата вернулась в форматы даты, поэтому у меня есть код, который обрабатывает приведенное ниже преобразование и справляется с возвращаемыми значениями None. Потребовались годы, чтобы найти это, поэтому я подумал, что ответ будет хорошим, как мой первый ответ на переполнение стека !!

    for board in boards:

        jira_sprints = jira.sprints(board.board_id)

        for jira_sprint in jira_sprints:

            sprint_info = jira.sprint_info(board.board_id, jira_sprint.id)

            board_id = board.board_id
            board_name = board.board_name
            name = sprint_info['name']
            id = sprint_info['id']


            if sprint_info['startDate'] != 'None':
                date_from = datetime.datetime.strptime(sprint_info['startDate'], "%d/%b/%y %I:%M %p").date()
            else:
                date_from = None
            if sprint_info['endDate'] != 'None':
                date_to = datetime.datetime.strptime(sprint_info['endDate'], "%d/%b/%y %I:%M %p").date()
            else:
                date_to = None
            state = sprint_info['state']
person dan_g    schedule 07.01.2019
comment
Это работает именно так, как ожидалось - спасибо! - person Whitney; 26.01.2021

Нашел обходной путь для моей проблемы, используя библиотеку python requests. Вот ссылка на него: http://docs.python-requests.org/en/master/

Я использовал следующее, чтобы получить дату начала и окончания интересующего спринта:

import requests
jiraResponse     = requests.get('https://<YOUR ATLASSIAN DOMAIN>.atlassian.net/rest/agile/1.0/board/<BOARD ID OF INTEREST>/sprint', auth=(<YOUR JIRA CREDENTIALS>))
jiraResponseJSON = jiraResponse.json()

jiraResponseJSON — это словарь, ключ values которого содержит все спринты, содержащиеся на доске интересов, в списке объектов, которые сами имеют ключи 'completeDate', 'endDate' и 'startDate'.

'endDate', очевидно, доступен до фактического закрытия спринта, тогда как 'completeDate' становится доступным только после закрытия спринта, например. его статус меняется с active на closed.

Примеры того, что я использовал:

startDate = jiraResponseJSON['values'][<SPRINT NUMBER>]['startDate'][:10]
endDate   = jiraResponseJSON['values'][<SPRINT NUMBER>]['completeDate'][:10]

Найдя дату начала и окончания спринта, можно затем использовать их обе в качестве переменных в запросе python-jira, например:

jira.search_issues('project=<YOUR PROJECT NAME> and issuetype=bug AND status changed to closed DURING ("' + startDate + '", "' + endDate + '")', maxResults=100)

person Mario Christov    schedule 23.08.2017