code: def put_attachment(self, attachment, content_type, data, headers=None):
          
          # need latest rev
          self.fetch()
          attachment_url = '/'.join((self.document_url, attachment))
          if headers is None:
              headers = {
                  'If-Match': self['_rev'],
                  'Content-Type': content_type
              }
          else:
              headers['If-Match'] = self['_rev']
              headers['Content-Type'] = content_type
  
          resp = self.r_session.put(
              attachment_url,
              data=data,
              headers=headers
          )
          resp.raise_for_status()
          self.fetch()
          return response_to_json_dict(resp)
docs: Adds a new attachment, or updates an existing attachment, to
          the remote document and refreshes the locally cached
          Document object accordingly.
  
          :param attachment: Attachment file name used to identify the
              attachment.
          :param content_type: The http ``Content-Type`` of the attachment used
              as an additional header.
          :param data: Attachment data defining the attachment content.
          :param headers: Optional, additional headers to be sent
              with request.
  
          :returns: Attachment addition/update status in JSON format