Skip to content

Commit c7913cc

Browse files
author
tiedu
committed
Add Exception Handle For Object Select
1 parent 332c77c commit c7913cc

File tree

3 files changed

+30
-3
lines changed

3 files changed

+30
-3
lines changed

qcloud_cos/cos_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ def send_request(self, method, url, bucket, timeout=30, **kwargs):
237237
for j in range(self._retry + 1):
238238
try:
239239
if j != 0:
240-
time.sleep(1)
240+
time.sleep(j)
241241
if method == 'POST':
242242
res = self._session.post(url, timeout=timeout, proxies=self._conf._proxies, **kwargs)
243243
elif method == 'GET':

qcloud_cos/cos_exception.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55

66
class CosException(Exception):
77
def __init__(self, message):
8-
Exception.__init__(self, message)
8+
self._message = message
9+
10+
def __str__(self):
11+
return str(self._message)
912

1013

1114
def digest_xml(data):
@@ -46,14 +49,17 @@ class CosServiceError(CosException):
4649
"""COS Server端错误,可以获取特定的错误信息"""
4750
def __init__(self, method, message, status_code):
4851
CosException.__init__(self, message)
49-
if method == 'HEAD': # 对HEAD进行特殊处理
52+
if isinstance(message, dict):
5053
self._origin_msg = ''
5154
self._digest_msg = message
5255
else:
5356
self._origin_msg = message
5457
self._digest_msg = digest_xml(message)
5558
self._status_code = status_code
5659

60+
def __str__(self):
61+
return str(self._digest_msg)
62+
5763
def get_origin_msg(self):
5864
"""获取原始的XML格式错误信息"""
5965
return self._origin_msg

qcloud_cos/select_event_stream.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22
import os
33
import uuid
44
import struct
5+
import logging
56
from .cos_comm import xml_to_dict
67
from .cos_comm import to_unicode
8+
from .cos_exception import CosServiceError
9+
10+
logger = logging.getLogger(__name__)
711

812

913
class EventStream():
@@ -23,6 +27,8 @@ def __next__(self):
2327
def next_event(self):
2428
"""获取下一个事件"""
2529
if self._finish:
30+
"""要把剩下的内容读完丢弃或者自己关连接,否则不会自动关连接"""
31+
self._raw.read()
2632
raise StopIteration
2733
total_byte_length = struct.unpack('>I', bytes(self._raw.read(4)))[0] # message总长度
2834
header_byte_length = struct.unpack('>I', bytes(self._raw.read(4)))[0] # header总长度
@@ -54,6 +60,21 @@ def next_event(self):
5460
elif ':event-type' in msg_headers and msg_headers[':event-type'] == "End":
5561
self._finish = True
5662
return {'End': {}}
63+
# 处理Error Message(抛出异常)
64+
if ':message-type' in msg_headers and msg_headers[':message-type'] == 'error':
65+
error_info = dict()
66+
error_info['code'] = msg_headers[':error-code']
67+
error_info['message'] = msg_headers[':error-message']
68+
error_info['resource'] = self._rt.request.url
69+
error_info['requestid'] = ''
70+
error_info['traceid'] = ''
71+
if 'x-cos-request-id' in self._rt.headers:
72+
error_info['requestid'] = self._rt.headers['x-cos-request-id']
73+
if 'x-cos-trace-id' in self._rt.headers:
74+
error_info['traceid'] = self._rt.headers['x-cos-trace-id']
75+
logger.error(error_info)
76+
e = CosServiceError('POST', error_info, self._rt.status_code)
77+
raise e
5778

5879
def get_select_result(self):
5980
"""获取查询结果"""

0 commit comments

Comments
 (0)