Python:获取返回错误的 Jira Tickets
Python: Get Jira Tickets that returned an error
我正在使用 atlassian rest API 并通过它创建问题。要访问 API,我正在使用 JIRA-API-Wrapper,请参阅:https://pypi.org/project/jira/.
在我的应用程序中,我上传了一堆票。由于性能原因,我使用 concurrent.futures。门票通过以下代码上传:
fields = [{'project': 'Project', 'summary': 'New summary', 'issuetype': {'name': 'Task'}}, ....]
with concurrent.futures.ThreadPoolExecutor() as executor:
data = executor.map(jira.create_issue, fields)
我的问题是,当由于某种原因无法上传工单时,我不确定如何获取信息。每次无法上传工单时,JIRA-Wrapper returns 一个 JIRAError-Exception
。因此,每当我遇到 JIRAError 时,我都必须以某种方式计算。但不幸的是,我不确定如何计算错误。
我知道可以通过以下方式检索结果:
for i in data:
counter = counter + 1
print(i)
但是因为数据包含 JIRAErrors,上面的代码失败了。这就是我尝试以下方法的原因。
try:
for i in data:
print(i)
except:
print(fields[counter])
但是当异常出现时,代码就继续了。因此我尝试了 while-loop
的解决方案,但他们也没有得到正确的解决方案。
有没有办法获取无法上传的门票?
我自己没用过jira-python。我编写了自己的 python 客户端,我已经使用了多年。我必须亲自尝试一下。
根据文档创建批量问题:
https://jira.readthedocs.io/en/latest/examples.html#issues
issue_list = [
{
'project': {'id': 123},
'summary': 'First issue of many',
'description': 'Look into this one',
'issuetype': {'name': 'Bug'},
},
{
'project': {'key': 'FOO'},
'summary': 'Second issue',
'description': 'Another one',
'issuetype': {'name': 'Bug'},
},
{
'project': {'name': 'Bar'},
'summary': 'Last issue',
'description': 'Final issue of batch.',
'issuetype': {'name': 'Bug'},
}]
issues = jira.create_issues(field_list=issue_list)
此外,还有一个关于您感兴趣的故障的注释:
Using bulk create will not throw an exception for a failed issue
creation. It will return a list of dicts that each contain a possible
error signature if that issue had invalid fields. Successfully created
issues will contain the issue object as a value of the issue key.
因此,要查看失败的问题,您将遍历问题并查找错误签名。
至于性能问题,你可以看看jira.create_issues(data, prefectch=false)
https://jira.readthedocs.io/en/latest/api.html#jira.JIRA.create_issues
prefetch (bool) – whether to reload the created issue Resource for
each created issue so that all of its data is present in the value
returned from this method.
但是,如果您必须使用 concurrent.futures,请注意,如果 jira 对象具有需要在调用 create_issue 之间保存的状态,则通过 jira.create_issue 调用时可能会失败当 运行 异步时。
If a func call raises an exception, then that exception will be raised
when its value is retrieved from the iterator.
如果您不信任 create_issues() 函数,我建议为每个 create_issue 使用单独的 jira 对象。
def create_issue(fields):
print(fields)
j_obj = JIRA(...)
try:
ret = j_obj.create_issue(fields)
except:
# Do something here
ret = False
return ret
with concurrent.futures.ThreadPoolExecutor() as executor:
data = executor.map(create_issue, issue_list)
items = [item for item in data]
print(items)
# Interact with result
pdb.set_trace()
当您进入跟踪时,创建的任何成功的问题都将是一个问题类型,任何失败的问题都将显示为 False。这只是一个示例,您可以决定要 return 的内容,采用您需要的任何格式。
我正在使用 atlassian rest API 并通过它创建问题。要访问 API,我正在使用 JIRA-API-Wrapper,请参阅:https://pypi.org/project/jira/.
在我的应用程序中,我上传了一堆票。由于性能原因,我使用 concurrent.futures。门票通过以下代码上传:
fields = [{'project': 'Project', 'summary': 'New summary', 'issuetype': {'name': 'Task'}}, ....]
with concurrent.futures.ThreadPoolExecutor() as executor:
data = executor.map(jira.create_issue, fields)
我的问题是,当由于某种原因无法上传工单时,我不确定如何获取信息。每次无法上传工单时,JIRA-Wrapper returns 一个 JIRAError-Exception
。因此,每当我遇到 JIRAError 时,我都必须以某种方式计算。但不幸的是,我不确定如何计算错误。
我知道可以通过以下方式检索结果:
for i in data:
counter = counter + 1
print(i)
但是因为数据包含 JIRAErrors,上面的代码失败了。这就是我尝试以下方法的原因。
try:
for i in data:
print(i)
except:
print(fields[counter])
但是当异常出现时,代码就继续了。因此我尝试了 while-loop
的解决方案,但他们也没有得到正确的解决方案。
有没有办法获取无法上传的门票?
我自己没用过jira-python。我编写了自己的 python 客户端,我已经使用了多年。我必须亲自尝试一下。
根据文档创建批量问题: https://jira.readthedocs.io/en/latest/examples.html#issues
issue_list = [
{
'project': {'id': 123},
'summary': 'First issue of many',
'description': 'Look into this one',
'issuetype': {'name': 'Bug'},
},
{
'project': {'key': 'FOO'},
'summary': 'Second issue',
'description': 'Another one',
'issuetype': {'name': 'Bug'},
},
{
'project': {'name': 'Bar'},
'summary': 'Last issue',
'description': 'Final issue of batch.',
'issuetype': {'name': 'Bug'},
}]
issues = jira.create_issues(field_list=issue_list)
此外,还有一个关于您感兴趣的故障的注释:
Using bulk create will not throw an exception for a failed issue creation. It will return a list of dicts that each contain a possible error signature if that issue had invalid fields. Successfully created issues will contain the issue object as a value of the issue key.
因此,要查看失败的问题,您将遍历问题并查找错误签名。
至于性能问题,你可以看看jira.create_issues(data, prefectch=false)
https://jira.readthedocs.io/en/latest/api.html#jira.JIRA.create_issues
prefetch (bool) – whether to reload the created issue Resource for each created issue so that all of its data is present in the value returned from this method.
但是,如果您必须使用 concurrent.futures,请注意,如果 jira 对象具有需要在调用 create_issue 之间保存的状态,则通过 jira.create_issue 调用时可能会失败当 运行 异步时。
If a func call raises an exception, then that exception will be raised when its value is retrieved from the iterator.
如果您不信任 create_issues() 函数,我建议为每个 create_issue 使用单独的 jira 对象。
def create_issue(fields):
print(fields)
j_obj = JIRA(...)
try:
ret = j_obj.create_issue(fields)
except:
# Do something here
ret = False
return ret
with concurrent.futures.ThreadPoolExecutor() as executor:
data = executor.map(create_issue, issue_list)
items = [item for item in data]
print(items)
# Interact with result
pdb.set_trace()
当您进入跟踪时,创建的任何成功的问题都将是一个问题类型,任何失败的问题都将显示为 False。这只是一个示例,您可以决定要 return 的内容,采用您需要的任何格式。