如何通过python将附件发布到jira

时间:2014-12-27 12:28:53

标签: python jira-rest-api

我想使用python通过jira rest api向jira发布附件,而不需要安装任何其他软件包。 我注意到“这个资源需要一个多部分帖子。”,我尝试过,但也许我的方法错了,我失败了

我只想知道如何通过python urllib2执行跟随cmd: “curl -D- -u admin:admin -X POST -H”X-Atlassian-Token:nocheck“-F”file=@myfile.txt“/ rest / api / 2 / issue / TEST-123 / attachments” 我不想使用subprocess.popen

4 个答案:

答案 0 :(得分:3)

您可以使用jira-python包。

像这样安装:

pip install jira-python

要添加附件,请使用add_attachment类的jira.client.JIRA方法:

  

add_attachment(* args,** kwargs)附加问题的附件并为其返回资源。

客户端尝试   打开或验证附件;它期望一个类似文件的对象   准备好使用它。用户仍然负责整理   (例如,关闭文件,查杀套接字等)

  参数:   
  • 问题 - 附加附件的问题   
  • 附件 - 类似文件的对象   附加到问题,如果它是一个字符串,也可以工作   filename。
  • filename - 可选名称   附件。如果省略,则为文件对象的name属性   用来。如果您通过除了之外的任何其他方法获取类文件对象   打开(),   确保以某种方式指定名称。
  • 您可以在official documentation

    中找到更多信息和示例

    答案 1 :(得分:2)

    抱歉我的问题不明确

    感谢How to POST attachment to JIRA using REST API?。 我已经解决了。

        boundary = '----------%s' % ''.join(random.sample('0123456789abcdef', 15))
        parts = []
    
        parts.append('--%s' % boundary)
        parts.append('Content-Disposition: form-data; name="file"; filename="%s"' % fpath)
        parts.append('Content-Type: %s' % 'text/plain')
        parts.append('')
        parts.append(open(fpath, 'r').read())
    
        parts.append('--%s--' % boundary)
        parts.append('')
    
        body = '\r\n'.join(parts)
    
        url = deepcopy(self.topurl)
        url += "/rest/api/2/issue/%s/attachments" % str(jrIssueId)
        req = urllib2.Request(url, body)
        req.add_header("Content-Type", "multipart/form-data; boundary=%s" % boundary)
        req.add_header("X-Atlassian-Token", "nocheck")
        res = urllib2.urlopen(req)
    
        print res.getcode()
        assert res.getcode() in range(200,207), "Error to attachFile " + jrIssueId
        return res.read()
    

    答案 2 :(得分:0)

    与官方文档一样,我们需要以二进制模式打开文件,然后上传。我希望下面的一小段代码对您有所帮助:)

    from jira import JIRA    
    
    # Server Authentication
    username = "XXXXXX"
    password = "XXXXXX"
    
    jira = JIRA(options, basic_auth=(str(username), str(password)))
    
    # Get instance of the ticket
    issue = jira.issue('PROJ-1')
    
    # Upload the file
    with open('/some/path/attachment.txt', 'rb') as f:
    jira.add_attachment(issue=issue, attachment=f)
    

    https://jira.readthedocs.io/en/master/examples.html#attachments

    答案 3 :(得分:0)

    使其生效的关键在于设置经过多部分编码的文件:

    import requests
    
    # Setup authentication credentials
    credentials  = requests.auth.HTTPBasicAuth('USERNAME','PASSWORD')
    
    # JIRA required header (as per documentation)
    headers = { 'X-Atlassian-Token': 'no-check' }
    
    # Setup multipart-encoded file
    files = [ ('file', ('file.txt', open('/path/to/file.txt','rb'), 'text/plain')) ]
    
    # (OPTIONAL) Multiple multipart-encoded files
    files = [
        ('file', ('file.txt', open('/path/to/file.txt','rb'), 'text/plain')),
        ('file', ('picture.jpg', open('/path/to/picture.jpg', 'rb'), 'image/jpeg')),
        ('file', ('app.exe', open('/path/to/app.exe','rb'), 'application/octet-stream'))
    ]
    # Please note that all entries are called 'file'. 
    # Also, you should always open your files in binary mode when using requests.
    
    # Run request
    r = requests.post(url, auth=credentials, files=files, headers=headers)
    

    https://2.python-requests.org/en/master/user/advanced/#post-multiple-multipart-encoded-files