Всем привет. Появилась мысль автоматизировать выгрузку отчетов из Jira. Так как любимым инструментом был Python, выбор пал на модуль от JIra позволяющий работать с их API. Кому интересно прошу по кат.
У atlassian есть официальная документация по использованию их модуля. Сам модуль так и называется «jira». По традиции выполним установку модуля командой:
Затем импортируем модуль непосредственно в коде:
Для того чтобы подключиться к самому серверу, необходимо создать клиент передав в него требуемые параметры:
Для того чтобы пройти авторизацию по паролю, вместо api key можно передать пароль. После того как авторизация пройдена, мы имеем активный api client к которому можно обращаться.
Возможности конечно не безграничны, но достаточно широкие. Мне было необходимо вытаскивать задачи за определенную неделю и составлять отчет по потраченным часам в Excell. Вытаскивать задачи можно непосредственно по самому проекту, по номеру задачи, так и по JQL запросу. Инструменты поиска достаточно гибкие и простые. Вся информация возвращаемая апи клиентом приходит в string, поэтому для работы с ней требуются дополнительные действия.
Составляем jql запрос и забираем по нему задачи:
К сожалению я так и не понял почему в тех задачах которые получаются через такой запрос нет свойства worklog. После некоторых попыток понять что же не так, я вежливо попросил у jira задачу по номеру:
В задаче возвращенной по такому методу поле worklog со списком worklog-ов было. В результате чего я стал брать задачи по jql запросу, вытаскивал номера задачи и уже после вытаскивал необходимую мне информацию:
Подобная строка позволяет вытащить все записи о времени от определенной задачи. У каждой из записи есть информация о времени как в секундах так и в текстовом представлении (1h, 3d etc).
Дальше все просто, берем отбрасываем записи, которые не подходят по периоду, в моем случае не совпадает номер недели:
Так как дата возвращается в строке, я воспользовался простым регулярным выражением, чтобы забирать его, а в следующей строке привожу уже необходимый тип. Выражение worklog_date.isocalendar()[1] позволяет узнать номер недели, который будет сравниваться с тем что необходимо забирать. Если он совпадает, топаем дальше и записываем остальные данные.
В целом вышеприведенный модуль позволяет решать достаточно широкий круг задач, нужно лишь время и желание.
UPD
Можно не запрашивать задачи повторно, а просто экспандить нужное поле
github.com/pycontribs/jira/blob/master/jira/client.py#L2371
спасибо HSerg
У 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