Пример #1
0
    def send_request(self, method, bucket, cos_path, **kwargs):
        """ 发送http请求

        :param method:
        :param bucket:
        :param cos_path:
        :param args:
        :return:
        """
        url = self._build_url(bucket, cos_path)
        logger.debug("sending request, method: %s, bucket: %s, cos_path: %s" % (method, bucket, cos_path))

        try:
            if method == 'POST':
                http_resp = self._http_session.post(url, verify=False, **kwargs)
            else:
                http_resp = self._http_session.get(url, verify=False, **kwargs)

            status_code = http_resp.status_code
            if status_code < 500:
                return http_resp.json()
            else:
                logger.warning("request failed, response message: %s" % http_resp.text)
                err_detail = 'url:%s, status_code:%d' % (url, status_code)
                return CosErr.get_err_msg(CosErr.NETWORK_ERROR, err_detail)
        except Exception as e:
            logger.exception("request failed, return SERVER_ERROR")
            err_detail = 'url:%s, exception:%s traceback:%s' % (url, str(e), format_exc())
            return CosErr.get_err_msg(CosErr.SERVER_ERROR, err_detail)
Пример #2
0
    def send_request(self, method, bucket, cos_path, **kwargs):
        """ 发送http请求

        :param method:
        :param bucket:
        :param cos_path:
        :param args:
        :return:
        """
        url = self._build_url(bucket, cos_path)
        logger.debug("sending request, method: %s, bucket: %s, cos_path: %s" %
                     (method, bucket, cos_path))

        try:
            if method == 'POST':
                http_resp = self._http_session.post(url,
                                                    verify=False,
                                                    **kwargs)
            else:
                http_resp = self._http_session.get(url, verify=False, **kwargs)

            status_code = http_resp.status_code
            if status_code < 500:
                return http_resp.json()
            else:
                logger.warning("request failed, response message: %s" %
                               http_resp.text)
                err_detail = 'url:%s, status_code:%d' % (url, status_code)
                return CosErr.get_err_msg(CosErr.NETWORK_ERROR, err_detail)
        except Exception as e:
            logger.exception("request failed, return SERVER_ERROR")
            err_detail = 'url:%s, exception:%s traceback:%s' % (url, str(e),
                                                                format_exc())
            return CosErr.get_err_msg(CosErr.SERVER_ERROR, err_detail)
Пример #3
0
 def _check_params(self, request):
     if not self._cred.check_params_valid():
         return CosErr.get_err_msg(CosErr.PARAMS_ERROR,
                                   self._cred.get_err_tips())
     if not request.check_params_valid():
         return CosErr.get_err_msg(CosErr.PARAMS_ERROR,
                                   request.get_err_tips())
     return None
Пример #4
0
    def _check_params(self, request):
        """检查用户输入参数, 检查通过返回None, 否则返回一个代表错误原因的dict

        :param request:
        :return:
        """
        if not self._cred.check_params_valid():
            return CosErr.get_err_msg(CosErr.PARAMS_ERROR, self._cred.get_err_tips())
        if not request.check_params_valid():
            return CosErr.get_err_msg(CosErr.PARAMS_ERROR, request.get_err_tips())
        return None
Пример #5
0
    def _check_params(self, request):
        """检查用户输入参数, 检查通过返回None, 否则返回一个代表错误原因的dict

        :param request:
        :return:
        """
        if not self._cred.check_params_valid():
            return CosErr.get_err_msg(CosErr.PARAMS_ERROR, self._cred.get_err_tips())
        if not request.check_params_valid():
            return CosErr.get_err_msg(CosErr.PARAMS_ERROR, request.get_err_tips())
        return None
Пример #6
0
    def send_request(self, method, bucket, cos_path, **args):
        url = self._build_url(bucket, cos_path)
        http_resp = {}
        try:
            if method == 'POST':
                http_resp = self._http_session.post(url, verify=False, **args)
            else:
                http_resp = self._http_session.get(url, verify=False, **args)

            status_code = http_resp.status_code
            if (status_code == 200 or status_code == 400):
                return http_resp.json()
            else:
                err_detail = 'url:%s, status_code:%d' % (url, status_code)
                return CosErr.get_err_msg(CosErr.NETWORK_ERROR, err_detail)
        except Exception as e:
            err_detail = 'url:%s, exception:%s' % (url, repr(e))
            return CosErr.get_err_msg(CosErr.SERVER_ERROR, err_detail)
Пример #7
0
    def send_request(self, method, bucket, cos_path, **args):
        url = self._build_url(bucket, cos_path)
        http_resp = {}
        try:
            if method == 'POST':
                http_resp = self._http_session.post(url, verify=False, **args)
            else:
                http_resp = self._http_session.get(url, verify=False, **args)

            status_code = http_resp.status_code
            if (status_code == 200 or status_code == 400):
                return http_resp.json()
            else:
                err_detail = 'url:%s, status_code:%d' % (url, status_code)
                return CosErr.get_err_msg(CosErr.NETWORK_ERROR, err_detail)
        except Exception as e:
            err_detail = 'url:%s, exception:%s' % (url, repr(e))
            return CosErr.get_err_msg(CosErr.SERVER_ERROR, err_detail)
Пример #8
0
    def upload_single_file(self, request):
        """ 单文件上传

        :param request:
        :return:
        """
        assert isinstance(request, UploadFileRequest)
        check_params_ret = self._check_params(request)
        if check_params_ret is not None:
            return check_params_ret

        local_path = request.get_local_path()
        file_size = os.path.getsize(local_path)
        # 判断文件是否超过单文件最大上限, 如果超过则返回错误
        # 并提示用户使用别的接口
        if file_size > self.max_single_file:
            return CosErr.get_err_msg(CosErr.NETWORK_ERROR, 'file is too big, please use upload_file interface')

        auth = cos_auth.Auth(self._cred)
        bucket = request.get_bucket_name()
        cos_path = request.get_cos_path()
        expired = int(time.time()) + self._expired_period
        sign = auth.sign_more(bucket, cos_path, expired)

        http_header = dict()
        http_header['Authorization'] = sign
        http_header['User-Agent'] = self._config.get_user_agent()

        with open(local_path, 'rb') as f:
            file_content = f.read()

        http_body = dict()
        http_body['op'] = 'upload'
        http_body['filecontent'] = file_content
        http_body['sha'] = FileOp._sha1_content(file_content)
        http_body['biz_attr'] = request.get_biz_attr()
        http_body['insertOnly'] = str(request.get_insert_only())

        timeout = self._config.get_timeout()
        ret = self.send_request('POST', bucket, cos_path, headers=http_header, files=http_body, timeout=timeout)

        if request.get_insert_only() != 0:
            return ret

        if ret[u'code'] == 0:
            return ret

        # try to delete object, and re-post request
        del_request = DelFileRequest(bucket_name=request.get_bucket_name(), cos_path=request.get_cos_path())
        ret = self.del_file(del_request)
        if ret[u'code'] == 0:
            return self.send_request('POST', bucket, cos_path, headers=http_header, files=http_body, timeout=timeout)
        else:
            return ret
Пример #9
0
    def upload_single_file(self, request):
        """ 单文件上传

        :param request:
        :return:
        """
        assert isinstance(request, UploadFileRequest)
        check_params_ret = self._check_params(request)
        if check_params_ret is not None:
            return check_params_ret

        local_path = request.get_local_path()
        file_size = os.path.getsize(local_path)
        # 判断文件是否超过单文件最大上限, 如果超过则返回错误
        # 并提示用户使用别的接口
        if file_size > self.max_single_file:
            return CosErr.get_err_msg(CosErr.NETWORK_ERROR, 'file is too big, please use upload_file interface')

        auth = cos_auth.Auth(self._cred)
        bucket = request.get_bucket_name()
        cos_path = request.get_cos_path()
        expired = int(time.time()) + self._expired_period
        sign = auth.sign_more(bucket, cos_path, expired)

        http_header = dict()
        http_header['Authorization'] = sign
        http_header['User-Agent'] = self._config.get_user_agent()

        with open(local_path, 'rb') as f:
            file_content = f.read()

        http_body = dict()
        http_body['op'] = 'upload'
        http_body['filecontent'] = file_content
        http_body['sha'] = FileOp._sha1_content(file_content)
        http_body['biz_attr'] = request.get_biz_attr()
        http_body['insertOnly'] = str(request.get_insert_only())

        timeout = self._config.get_timeout()
        ret = self.send_request('POST', bucket, cos_path, headers=http_header, files=http_body, timeout=timeout)

        if request.get_insert_only() != 0:
            return ret

        if ret[u'code'] == 0:
            return ret

        # try to delete object, and re-post request
        del_request = DelFileRequest(bucket_name=request.get_bucket_name(), cos_path=request.get_cos_path())
        ret = self.del_file(del_request)
        if ret[u'code'] == 0:
            return self.send_request('POST', bucket, cos_path, headers=http_header, files=http_body, timeout=timeout)
        else:
            return ret
Пример #10
0
    def upload_single_file_from_buffer(self, request):
        """ 单文件上传

        :param request:
        :return:
        """
        assert isinstance(request, UploadFileFromBufferRequest)
        check_params_ret = self._check_params(request)
        if check_params_ret is not None:
            return check_params_ret

        data = request.get_data()
        file_size = len(data)
        # 判断文件是否超过单文件最大上限, 如果超过则返回错误
        # 并提示用户使用别的接口
        if file_size > self.max_single_file:
            return CosErr.get_err_msg(
                CosErr.NETWORK_ERROR,
                'file is too big, please use upload_file interface')

        auth = cos_auth.Auth(self._cred)
        bucket = request.get_bucket_name()
        cos_path = request.get_cos_path()
        expired = int(time.time()) + self._expired_period
        sign = auth.sign_more(bucket, cos_path, expired)

        http_header = dict()
        http_header['Authorization'] = sign
        http_header['User-Agent'] = self._config.get_user_agent()

        file_content = data

        http_body = dict()
        http_body['op'] = 'upload'
        http_body['filecontent'] = file_content
        http_body['sha'] = FileOp._sha1_content(file_content)
        http_body['biz_attr'] = request.get_biz_attr()
        http_body['insertOnly'] = str(request.get_insert_only())

        timeout = self._config.get_timeout()
        ret = self.send_request('POST',
                                bucket,
                                cos_path,
                                headers=http_header,
                                files=http_body,
                                timeout=timeout)
        return ret
Пример #11
0
 def _check_params(self, request):
     if not self._cred.check_params_valid():
         return CosErr.get_err_msg(CosErr.PARAMS_ERROR, self._cred.get_err_tips())
     if not request.check_params_valid():
         return CosErr.get_err_msg(CosErr.PARAMS_ERROR, request.get_err_tips())
     return None