pythonattachmentconfluenceoauth-1.0a

How do i post an attachment while calling confluence api using oauth1 with python?


i am successfully able to update confluence page calling confluence api with oauth1. But i am unable to post an attachment. i have looked in to multiple blogs but i am unable to find any solution.


Solution

  • I was able to resolve this issue by using pythons library "requests_oauthlib". Below is the snippet of the code that i am using for updating the attachment on confluence.

    from requests_oauthlib import OAuth1
    
    class Confluence_Page_Update():
        def __init__(self, file__with_path):
            self.client_key = 'abcxyz'
            self.client_secret = ''
            self.key = open("/opt/SP/apps/confluence_auto_update/rsa.pem").read()
            self.resource_owner_key = 'jasnjdnajsndjandjnaj'
            self.resource_owner_secret = 'ajsndjansjdnajdnja'
            attachment = open(file__with_path, 'rb')
            filename = ntpath.basename(file__with_path)
            self.files = {'file': (filename, attachment, 'application/octet-stream')}
    
    
    def send_attachment(self, pageid, attachmentid):
            headers = {"X-Atlassian-Token": "nocheck"}
            oauth = OAuth1(self.client_key, client_secret=self.client_secret,
                           resource_owner_key=self.resource_owner_key,
                           resource_owner_secret=self.resource_owner_secret,
                           signature_type='auth_header', rsa_key=self.key, signature_method='RSA-SHA1')
            r = requests.post(url="https://cps.confluence.abc.com/rest/api/content/" + pageid + "/child/attachment/" + attachmentid + "/data", auth=oauth, files=self.files, headers=headers)
            print(r.status_code)