Jira Python получает описание из подзадачи

Я пытаюсь получить описание подзадачи в 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. :) Что мне не хватает?

Заранее спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
144
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Думаю, ваш подход к вызову jira.issue(subtask_key) правильный, но я заметил опечатку:
subtask_data = jira.issue(subtask_key, поля = 'описание')

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

Apolymoxic 11.04.2024 18:43

Я понял, что делаю не так.

Раньше я пытался получить данные через цикл

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 12.04.2024 09:16

@Guillius Нет, это не опечатка. Я показывал необработанные данные (subtask.raw['fields']), и их не следует путать с тем, как вы на самом деле вызываете данные в полях (subtask.fields.key). Если бы я получил что-то в разделе полей, показанном выше, я бы сделал запрос subtask.fields.fields.summary. Но ИДК, это точно, потому что я никогда этого не пробовал. Я попробую вместе с запросом ключа без полей и сообщу вам, как все пройдет.

Apolymoxic 14.04.2024 00:09

@Guillius, похоже, я ошибался. subtask.keyдействительно работает! Я совершенно упустил это из виду. Итак, преобразование в строку или использование .key работает. Я обновляю ответ, чтобы отразить это. Если вы хотите отправить ответ, показывающий это, я отмечу его как правильный.

Apolymoxic 15.04.2024 22:48
Ответ принят как подходящий

В предыдущей правке собственного ответа на вопрос вы показали данные списка подзадач:

'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.

Ваша единственная ошибка была в иерархии вложенных словарей.
Обычно я стараюсь избежать такой ошибки, сначала печатая полный объект/список/слово один раз, а затем сосредоточиваясь на фактических данных, которые мне нужно извлечь для моего варианта использования. Делая это шаг за шагом, вы предотвратите подобные ошибки.

Ага. Глупая ошибка, но вы смогли ее уловить. Я мог бы также использовать элемент и преобразовать его в строку, но этот метод, вероятно, наиболее точный. Спасибо!

Apolymoxic 16.04.2024 15:22

Другие вопросы по теме