Я пытаюсь получить описание подзадачи в Jira. Я могу получить всю информацию из основной задачи: сводку, статус, описание, подзадачи и т. д., но когда я извлекаю данные для конкретной подзадачи, мне не хватает поля описания.
ticket_data = jira.issue("PROJ-12345")
for subtask in ticket_data.fields.subtasks:
if "generate data" in (subtask.fields.summary).lower():
st_desc = subtask.fields.description # ERROR
print(subtask.raw['fields'] # Description is not a field
Я подумал, что, возможно, мне стоит попробовать вытащить только подзадачу; Для меня имеет смысл, что основная задача будет иметь ограниченную информацию о своих подзадачах. Но когда я извлекаю данные для подзадачи напрямую, я получаю ту же самую точную информацию, что и из основной задачи, а поле описания отсутствует. Я даже пытался определить, что мне нужно ТОЛЬКО поле описания.
subtask_data = jira.issue(subtask_key, fields='description')
print(subtask_data.raw['fields']) # Returns same data - Description is not a field
Я могу без проблем создавать подзадачи с описанием.
name: "subtask_1"
project: "PROJ"
summary: "Generate data for the given task"
assignee: "[email protected]"
description: "All the data I need for the description entered here"
issuetype: "Sub-task"
parent: "PROJ-12345"
Я нашел несколько сообщений, посвященных получению данных из подзадач или тому, как создавать подзадачи, я даже нашел сообщение в Atlassian, где, похоже, возникла аналогичная проблема, но на нее нет ответа. Поэтому я подумал, что попрошу помощи у замечательных пользователей Stack Overflow. :) Что мне не хватает?
Заранее спасибо!






Думаю, ваш подход к вызову jira.issue(subtask_key) правильный, но я заметил опечатку:
subtask_data = jira.issue(subtask_key, поля = 'описание')
Я понял, что делаю не так.
Раньше я пытался получить данные через цикл
ticket_data = jira.issue("PROJ-12345")
for subtask in ticket_data.fields.subtasks:
# print (subtask.fields.key) # !Error
if "generate data" in (subtask.fields.summary).lower():
# print(subtask) # Prints "PROJ-555"
subtask_data = jira.issue(subtask)
print(subtask_data.raw['fields']) # Description is not a field
Но, как описано в вопросе, он вернул минимальные данные и description не было полем.
Я пытался получить ключ из поля подзадач в основной задаче, но неправильно использовал subtask.fields.key, а не просто subtask.key. Использование этого поля позволило мне получить данные, которые включали столь необходимое поле «описание».
ticket_data = jira.issue("PROJ-12345")
for subtask in ticket_data.fields.subtasks:
if "generate data" in (subtask.fields.summary).lower():
subtask_data = jira.issue(subtask.key)
print(subtask_data.raw['fields']) # Description IS a field! Woot woot!
В качестве альтернативы я мог бы преобразовать объект подзадачи в строку следующим образом: subtask_data = jira.issue(str(subtask))
subtask.fields.key — это еще одна опечатка (в вашем тексте, перед вторым блоком кода)? Потому что я понимаю, почему это не сработает: ключ и поля на самом деле находятся на одном уровне, а не ключевые поля «ниже»…
@Guillius Нет, это не опечатка. Я показывал необработанные данные (subtask.raw['fields']), и их не следует путать с тем, как вы на самом деле вызываете данные в полях (subtask.fields.key). Если бы я получил что-то в разделе полей, показанном выше, я бы сделал запрос subtask.fields.fields.summary. Но ИДК, это точно, потому что я никогда этого не пробовал. Я попробую вместе с запросом ключа без полей и сообщу вам, как все пройдет.
@Guillius, похоже, я ошибался. subtask.keyдействительно работает! Я совершенно упустил это из виду. Итак, преобразование в строку или использование .key работает. Я обновляю ответ, чтобы отразить это. Если вы хотите отправить ответ, показывающий это, я отмечу его как правильный.
В предыдущей правке собственного ответа на вопрос вы показали данные списка подзадач:
'subtasks': [
{
'id': '12345678',
'key': 'PROJ-555',
'self': 'https://jira.myurl.com/issue/12345678',
'fields': {
'summary': 'Generate data for the given task',
'status': {},
'priority': {},
'issuetype': {}
}
}
]
Вы пытались получить доступ к данным словаря по адресу subtask.fields.key (где subtask является элементом списка), но fields и key на самом деле находятся на одном «уровне» в словаре subtask.key не является частью вложенного словаря fields, а скорее частью словаря subtask.
Ваша единственная ошибка была в иерархии вложенных словарей.
Обычно я стараюсь избежать такой ошибки, сначала печатая полный объект/список/слово один раз, а затем сосредоточиваясь на фактических данных, которые мне нужно извлечь для моего варианта использования. Делая это шаг за шагом, вы предотвратите подобные ошибки.
Ага. Глупая ошибка, но вы смогли ее уловить. Я мог бы также использовать элемент и преобразовать его в строку, но этот метод, вероятно, наиболее точный. Спасибо!
Хороший улов. Этого нет в реальном коде; это была просто опечатка на этой странице. Я исправил это на этой странице, но если это была опечатка в коде, я определенно вижу, что это вызывает проблемы. На данный момент похоже, что описание не возвращается независимо от того, определяю ли я поля или нет.