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

Всем привет. Появилась мысль автоматизировать выгрузку отчетов из 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

Комментарии 7

    0
    >К сожалению я так и не понял почему в тех задачах которые получаются через такой запрос нет свойства worklog. После некоторых попыток понять что же не так, я вежливо попросил у jira задачу по номеру
    экспандить расширенные поля надо.
    0
    Но ведь есть готовый метод jira.worklogs(issues), зачем этот огород из цепочки свойств городить?

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

    Самое читаемое