【问题标题】:Python: Get Jira Tickets that returned an errorPython:获取返回错误的 Jira 票证
【发布时间】:2020-07-28 21:48:52
【问题描述】:

我正在使用 atlassian rest API 并通过它创建问题。要访问我使用 JIRA-API-Wrapper 的 API,请参阅: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 都会返回 JIRAError-Exception。因此,每当我收到 JIRAError 时,我都必须以某种方式计算。但不幸的是,我不确定如何计算错误。

我知道可以通过以下方式检索结果:

for i in data:
      counter = counter + 1
      print(i)

但是因为 data 包含 JIRAErrors 上面的代码失败了。这就是我尝试以下方法的原因。

try:
    for i in data:
       print(i)
 except:
        print(fields[counter])

但是当异常出现时,代码会继续。因此我尝试了while-loop 的解决方案,但他们也没有得到正确的解决方案。

有没有办法获取无法上传的票?

【问题讨论】:

    标签: python jira ticket-system


    【解决方案1】:

    我自己没有使用过 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)
    

    此外,还有一个关于您感兴趣的失败的注释:

    使用批量创建不会为失败的问题抛出异常 创建。它将返回一个字典列表,每个字典都包含一个可能的 如果该问题具有无效字段,则错误签名。成功创建 问题将包含问题对象作为问题键的值。

    因此,要查看失败的问题,您需要遍历问题并查找错误签名。

    至于性能问题,您可以查看 jira.create_issues(data, prefectch=false)

    https://jira.readthedocs.io/en/latest/api.html#jira.JIRA.create_issues

    prefetch (bool) – 是否重新加载创建的问题资源 每个创建的问题,以便其所有数据都存在于值中 从此方法返回。

    但是,如果您必须使用 concurrent.futures,请注意,如果 jira 对象在异步运行时需要在调用 create_issue 之间保存状态,则在通过 jira.create_issue 调用时它可能会失败。

    如果 func 调用引发异常,则该异常将被引发 当它的值从迭代器中检索出来时。

    如果您不信任 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。这只是一个示例,您可以决定要返回的内容,以您需要的任何格式。

    【讨论】:

    • 就我而言,由于性能原因,我不想批量创建问题。见confluence.atlassian.com/jirakb/…因此我一一创建它们以提高性能。通过一对一的方法,返回值包含错误消息。因此,我不确定如何对其进行迭代
    • 更新了原来的答案
    猜你喜欢
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多