jira-python — как вы обновляете поле fixVersions?

Я не уверен, что я делаю неправильно здесь, и надеюсь, что у кого-то еще есть такая же проблема. Я не получаю никаких ошибок, и мой json соответствует тому, что должно быть правильным как в документах Jira, так и в онлайн-вопросах jira-python. Мои версии являются действительными версиями Jira. У меня также нет проблем с тем, чтобы сделать это напрямую через API, но мы переписываем все, чтобы пройти через jira-python для чистоты/простоты использования.

Это просто полностью очищает поле fixVersions в Jira.

issue=jira.issue("TKT-100")
issue.update(fields={'fixVersions':[{'add': {'name': 'add_me'}},{'remove': {'name': 'remove_me'}}]})

Я могу добавить новую версию в fixVersions с помощью issue.add_field_value(), но это не сработает, потому что мне нужно добавить и удалить в одном запросе историю тикета.

issue.add_field_value('fixVersions', {'name': 'add_me'})

Любые идеи?


person user797963    schedule 14.04.2015    source источник
comment
На самом деле я понял, что вы можете сделать это, сначала найдя все fixVersion в заявке, бросив все, кроме той, которую вы хотите удалить, в список, добавив новую fixVersion и используя глагол «set» вместо «add» и « удалять'. Jira не перезаписывает другие значения fixVersion.   -  person user797963    schedule 14.04.2015


Ответы (3)


Вот пример кода того, как я заставил его работать для тех, кто столкнется с этим позже...

    fixVersions = []
    issue = jira.issue('issue_key')
    for version in issue.fields.fixVersions:
        if version.name != 'version_to_remove':
            fixVersions.append({'name': version.name})
    fixVersions.append({'name': 'version_to_add'})
    issue.update(fields={'fixVersions': fixVersions})
person user797963    schedule 15.04.2015
comment
Я действительно начал с этого подхода и заметил, что он очищает существующие версии. Только последняя версия застряла. Но использование add_field_value() помогло. - person sonofanickel; 28.03.2019

Я сделал по другому:

  1. Создайте версию в целевом проекте.
  2. Обновить тикет.

    ver = jira.create_version(name='version_name', project='PROJECT_NAME')
    issue = jira.issue('ISSUE_NUM')
    i.update(fields={'fixVersions': [{'name' : название версии}]})}

В моем случае это сработало.

person bvrch    schedule 24.04.2020

Немного более питоническая версия решения user797963 может выглядеть так.

def change_fix_version(tickets, remove_versions=[], add_versions=[]):
    fix_versions={version.name for version in ticket.fields.fixVersions}
    fix_versions.difference_update(set(remove_versions))
    fix_versions.update(set(add_versions))
    ticket.update(fields={'fixVersions':fix_versions})

Вы бы назвали это так:

 change_fix_versions(jira.issue('my_issue'), remove_versions=['draft'], add_versions=['master', 'release'])
person user1235183    schedule 24.06.2020
comment
вы забыли, что fix_versions должен быть списком диктовок. fix_versions=[version.raw for version in ticket.fields.fixVersions]. и тогда вы должны предположить, что ваше использование похоже на это change_fix_versions(jira.issue('my_issue'), remove_versions=[{'name':'draft'}], add_versions=[{'name':'master'}, {'name':'release'}])' - person studioj; 05.06.2021