Jira API 受让人不再填充 "name",而是需要 "accoundId"
Jira API Assignee not populating with "name" anymore, instead needs "accoundId"
我正在与 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 天前开始,受让人不再工作。我进行了一些谷歌搜索,发现它现在需要 accountId 而不是名称,我可以通过网络 UI 通过在评论中以 @'ing 某人的形式留下评论来获得它。作为一个临时解决方案,我已经填充了一个字典以供参考(并且有效),但是我想让它更具动态性以便将来验证脚本。
'assignee': {'accountId': jira_dict[my_username]},
我似乎真的找不到任何关于从名称中查找 accountId 的文档,我想我会继续问社区看看是否还有其他人 运行 into/solved 这个问题。
我正在考虑编写一个新函数来为我执行此查询,然后 returns accountId。
编辑
我确实找到了这个:
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=(",", ": ")))
但是我遇到了 404,我将服务器地址添加到 url 的开头,并将用户替换为有问题的用户名。
好的,我找到了一个解决方案,它不是一个优雅的解决方案,但它确实满足了我的需要。所以这是新功能:
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
我强烈建议您不要再依赖 username
。您使用的端点已弃用,另请参阅 https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/。
"new" 或者可能更好的方法是使用 /user/search
端点,如下所述: https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-user-search-get 在那里你可以定义一个 query
匹配某些属性用户(displayName
或 emailAddress
),或者搜索 accountId
(如果您已有)。因此,如果您 link 将用户从云端转移到其他 "user directory" (或者只是您存储了一些用户名的脚本),请使用电子邮件地址或帐户 ID 替换它,这样您就可以正确地 link 你的用户。
我正在与 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 天前开始,受让人不再工作。我进行了一些谷歌搜索,发现它现在需要 accountId 而不是名称,我可以通过网络 UI 通过在评论中以 @'ing 某人的形式留下评论来获得它。作为一个临时解决方案,我已经填充了一个字典以供参考(并且有效),但是我想让它更具动态性以便将来验证脚本。
'assignee': {'accountId': jira_dict[my_username]},
我似乎真的找不到任何关于从名称中查找 accountId 的文档,我想我会继续问社区看看是否还有其他人 运行 into/solved 这个问题。
我正在考虑编写一个新函数来为我执行此查询,然后 returns accountId。
编辑 我确实找到了这个:
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=(",", ": ")))
但是我遇到了 404,我将服务器地址添加到 url 的开头,并将用户替换为有问题的用户名。
好的,我找到了一个解决方案,它不是一个优雅的解决方案,但它确实满足了我的需要。所以这是新功能:
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
我强烈建议您不要再依赖 username
。您使用的端点已弃用,另请参阅 https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/。
"new" 或者可能更好的方法是使用 /user/search
端点,如下所述: https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-user-search-get 在那里你可以定义一个 query
匹配某些属性用户(displayName
或 emailAddress
),或者搜索 accountId
(如果您已有)。因此,如果您 link 将用户从云端转移到其他 "user directory" (或者只是您存储了一些用户名的脚本),请使用电子邮件地址或帐户 ID 替换它,这样您就可以正确地 link 你的用户。