Jira API Assignee больше не заполняется именем «name», вместо этого требуется «accoundId» - PullRequest
0 голосов
/ 19 февраля 2020

Я работаю с Python 3.x

Ранее у меня была функция для создания заявок, которая выглядит следующим образом

def jira_incident(jira_subject, jira_description):
    user = "username"
    apikey = 'apikey'
    server = 'https://serverName.atlassian.net'
    options = {
        'server': server,
        'verify': False
    }
    issue_dict = {
        'project': {'key': 'project_name'},
        'summary': str(jira_subject),
        'description': str(jira_description),
        'issuetype': {'name': 'Incident'},
        'assignee': {'name': my_username},
        'priority': {'name': 'Low'},
        'customfield_10125':
            {'value': 'Application Ops'}
    }
    jira = JIRA(options, basic_auth=(user, apikey))
    new_issue = jira.create_issue(fields=issue_dict)
    return new_issue

my_username - это глобальная переменная, которая используется для а также другие вещи.

В любом случае, сотрудник не работает около 2 дней go. Я немного погуглил и обнаружил, что теперь ему нужен идентификатор учетной записи, а не имя, я могу получить это через веб-интерфейс, оставив комментарий как @ 'кто-то в комментарии. В качестве временного решения я заполнил словарь для ссылки (и это работает), однако я хотел бы сделать это более динамичным c для проверки сценария в будущем.

'assignee': {'accountId': jira_dict[my_username]},

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

Я думал просто написать новую функцию, которая выполняет этот запрос для меня, а затем возвращает accountId.

EDIT Я нашел это:

import requests
from requests.auth import HTTPBasicAuth
import json

url = "/rest/api/3/user/bulk/migration"

auth = HTTPBasicAuth("email@example.com", "<api_token>")

headers = {
   "Accept": "application/json"
}

response = requests.request(
   "GET",
   url,
   headers=headers,
   auth=auth
)

print(json.dumps(json.loads(response.text), sort_keys=True, indent=4, separators=(",", ": ")))

Как бы то ни было, я добавил адрес сервера в начало URL-адреса и заменил пользователя на имя пользователя.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Я настоятельно рекомендую вам больше не полагаться на username. Конечная точка, которую вы используете, устарела, см. Также https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/.

«Новый» или, возможно, лучший способ - использовать конечную точку /user/search, как описано здесь: https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api -rest-api-3-user-search-get Там вы можете определить query, который сопоставляется с определенными свойствами пользователя (displayName или emailAddress), или выполнить поиск accountId если у вас уже есть. Поэтому, если вы связываете пользователей из облака с каким-либо другим «каталогом пользователей» (или просто сценариями, в которых вы сохранили некоторые имена пользователей), замените его, используя адрес электронной почты или accountId, чтобы вы могли правильно связать своих пользователей.

0 голосов
/ 21 февраля 2020

Хорошо, я нашел решение, это не элегантное решение, но оно делает именно то, что мне нужно. Итак, вот новая функция:

def jira_account_id_from_username(username):
    r = requests.get('https://serverName.atlassian.net/rest/api/3/user?username=' + username, auth=("username",api_key), verify=False)
    value = re.search('"accountId":"(.*?)",', str(r.text)).group(1)
    return value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...