files.py 文件源码

python
阅读 24 收藏 0 点赞 0 评论 0

项目:orangecloud-client 作者: antechrestos 项目源码 文件源码
def upload(self, file_path, folder_id=None):
        mime_type, _ = guess_type(file_path)
        mime_type = 'application/octet-stream' if mime_type is None else mime_type
        file_name = os.path.basename(file_path)
        self._debug('upload - %s(%s) => %s', file_name, mime_type,
                    folder_id if folder_id is not None else 'root')
        file_stats = os.stat(file_path)
        file_name_encoded = unicode(file_name, "utf-8", errors="ignore")
        description = dict(name=file_name_encoded, size=str(file_stats.st_size))
        if folder_id is not None:
            description['folder'] = folder_id

        def send():
            with open(file_path, 'rb') as f:
                uri = '/files/content'
                m = MultipartEncoder(
                    fields=dict(description=json.dumps(dict(description)),
                                file=(file_name_encoded, f, mime_type))
                )
                response = self._call(self.client.post, '%s%s%s' % (URL_UPLOAD, BASE_URI, uri),
                                      data=m,
                                      headers={'Content-Type': m.content_type})
                self._debug('upload - %s - %s', file_name, response.text)
                return AbstractDomain._read_response(response)

        try:
            return send()
        except ClientError, ex:
            if Files._is_token_expired_on_upload(ex.response):
                self._logger.info('upload  - token invalid - refreshing token')
                self.client._refresh_token()
                send()
            else:
                raise
        except ConnectionError, conn:
            if len(conn.args) == 1 and type(conn.args[0]) == ProtocolError :
                protocol_error = conn.args[0]
                if len(protocol_error.args) == 2:
                    str_error, error = protocol_error.args
                    if error.errno == errno.ECONNRESET:
                        self._logger.info('upload  - connection reset - refreshing token')
                        self.client._refresh_token()
                        self._logger.info('upload  - resending the payload')
                        return send()
            raise
        except BaseException, ex:
            self._logger.error('upload - unmanaged exception - %s', type(ex))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号