Esempio n. 1
0
    def transfer(self, filename, fileobj=None, xml=None):
        fields = {}
        if fileobj is None and filename is None:
            raise BQCommError('Filename or fileobj are required for transfer')
        if fileobj is None and os.path.exists(filename):
            fileobj = open(filename, 'rb')
        if fileobj is not None and filename is None:
            filename = fileobj.name

        if fileobj is not None:
            filename = normalize_unicode(filename)
            fields['file'] = (os.path.basename(filename), fileobj,
                              'application/octet-stream')
        if xml is not None:
            fields['file_resource'] = xml
        if fields:
            # https://github.com/requests/toolbelt/issues/75
            m = MultipartEncoder(fields=fields)
            m._read = m.read  #pylint: disable=protected-access
            m.read = lambda size: m._read(8129 * 1024)  # 8MB
            # ID generator is used to force load balancing operations
            response = self.post("transfer_" + id_generator(),
                                 data=m,
                                 headers={
                                     'Accept': 'text/xml',
                                     'Content-Type': m.content_type
                                 })
            return response