Как стать автором
Обновить

Работа с Jira API при помощи Python

Время на прочтение2 мин
Количество просмотров51K
Всем привет. Появилась мысль автоматизировать выгрузку отчетов из Jira. Так как любимым инструментом был Python, выбор пал на модуль от JIra позволяющий работать с их API. Кому интересно прошу по кат.

image

У atlassian есть официальная документация по использованию их модуля. Сам модуль так и называется «jira». По традиции выполним установку модуля командой:

pip install jira

Затем импортируем модуль непосредственно в коде:

from jira import JIRA

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

jira_options = {'server': 'https://project-name.atlassian.net'}
jira = JIRA(options=jira_options, basic_auth=(login, api_key))

Для того чтобы пройти авторизацию по паролю, вместо api key можно передать пароль. После того как авторизация пройдена, мы имеем активный api client к которому можно обращаться.

Возможности конечно не безграничны, но достаточно широкие. Мне было необходимо вытаскивать задачи за определенную неделю и составлять отчет по потраченным часам в Excell. Вытаскивать задачи можно непосредственно по самому проекту, по номеру задачи, так и по JQL запросу. Инструменты поиска достаточно гибкие и простые. Вся информация возвращаемая апи клиентом приходит в string, поэтому для работы с ней требуются дополнительные действия.
Составляем jql запрос и забираем по нему задачи:

jql = 'project = ' + project_key + ' AND  worklogDate >= ' + work_date
issues_list = jira.search_issues(jql) 

К сожалению я так и не понял почему в тех задачах которые получаются через такой запрос нет свойства worklog. После некоторых попыток понять что же не так, я вежливо попросил у jira задачу по номеру:

issue = jira.issue(issue_key)

В задаче возвращенной по такому методу поле worklog со списком worklog-ов было. В результате чего я стал брать задачи по jql запросу, вытаскивал номера задачи и уже после вытаскивал необходимую мне информацию:

worklogs = issue.fields.worklog.worklogs

Подобная строка позволяет вытащить все записи о времени от определенной задачи. У каждой из записи есть информация о времени как в секундах так и в текстовом представлении (1h, 3d etc).
Дальше все просто, берем отбрасываем записи, которые не подходят по периоду, в моем случае не совпадает номер недели:

worklog_date_str = re.search(r'(\d{4}-\d{2}-\d{2})', worklog.started)
            worklog_date = datetime.strptime(worklog_date_str.group(0), '%Y-%m-%d')
            if worklog_date.isocalendar()[1] == weak_number:

Так как дата возвращается в строке, я воспользовался простым регулярным выражением, чтобы забирать его, а в следующей строке привожу уже необходимый тип. Выражение worklog_date.isocalendar()[1] позволяет узнать номер недели, который будет сравниваться с тем что необходимо забирать. Если он совпадает, топаем дальше и записываем остальные данные.

В целом вышеприведенный модуль позволяет решать достаточно широкий круг задач, нужно лишь время и желание.

UPD

Можно не запрашивать задачи повторно, а просто экспандить нужное поле
github.com/pycontribs/jira/blob/master/jira/client.py#L2371
спасибо HSerg
Теги:
Хабы:
Всего голосов 14: ↑12 и ↓2+10
Комментарии7

Публикации

Истории

Работа

Data Scientist
68 вакансий

Ближайшие события

2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
11 – 13 декабря
Международная конференция по AI/ML «AI Journey»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань