本文整理汇总了Python中webob.Response.bytes_transferred方法的典型用法代码示例。如果您正苦于以下问题:Python Response.bytes_transferred方法的具体用法?Python Response.bytes_transferred怎么用?Python Response.bytes_transferred使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类webob.Response
的用法示例。
在下文中一共展示了Response.bytes_transferred方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: relay_req
# 需要导入模块: from webob import Response [as 别名]
# 或者: from webob.Response import bytes_transferred [as 别名]
def relay_req(self, req, req_url, path_str_ls, relay_servers, webcaches):
""" """
# util
def get_relay_netloc(relay_server):
parsed = urlparse(relay_server)
svr = parsed.netloc.split(':')
if len(svr) == 1:
relay_addr = svr[0]
relay_port = '443' if parsed.scheme == 'https' else '80'
else:
relay_addr, relay_port = svr
return relay_addr, relay_port
parsed_req_url = urlparse(req_url)
relay_servers_count = len(relay_servers)
for relay_server in relay_servers:
relay_addr, relay_port = get_relay_netloc(relay_server)
connect_url = urlunparse((parsed_req_url.scheme,
relay_addr + ':' + relay_port,
'/' + '/'.join(path_str_ls),
parsed_req_url.params,
parsed_req_url.query,
parsed_req_url.fragment))
if webcaches[relay_server]:
proxy = webcaches[relay_server]
else:
proxy = None
self.logger.debug('Req: %s %s, Connect to %s via %s' %
(req.method, req.url, connect_url, proxy))
result = RelayRequest(self.conf, req, connect_url, proxy=proxy,
conn_timeout=self.conn_timeout,
node_timeout=self.node_timeout,
chunk_size=self.client_chunk_size)()
if isinstance(result, HTTPException):
if relay_servers_count > 1:
relay_servers_count -= 1
self.logger.info('Retry Req: %s %s, Connect to %s via %s' %
(req.method, req.url, connect_url, proxy))
continue
else:
return result
response = Response(status='%s %s' % (result.status, result.reason))
response.bytes_transferred = 0
def response_iter():
try:
while True:
with ChunkReadTimeout(self.client_timeout):
chunk = result.read(self.client_chunk_size)
if not chunk:
break
yield chunk
response.bytes_transferred += len(chunk)
except GeneratorExit:
pass
except (Exception, TimeoutError):
raise
response.headerlist = result.getheaders()
response.content_length = result.getheader('Content-Length')
if response.content_length < 4096:
response.body = result.read()
else:
response.app_iter = response_iter()
update_headers(response, {'accept-ranges': 'bytes'})
response.content_length = result.getheader('Content-Length')
update_headers(response, result.getheaders())
if req.method == 'HEAD':
update_headers(response, {'Content-Length':
result.getheader('Content-Length')})
response.status = result.status
return response
示例2: relay_req
# 需要导入模块: from webob import Response [as 别名]
# 或者: from webob.Response import bytes_transferred [as 别名]
def relay_req(self, req, req_url, path_str_ls, relay_servers, webcaches):
""" """
# util
def get_relay_netloc(relay_server):
parsed = urlparse(relay_server)
svr = parsed.netloc.split(':')
if len(svr) == 1:
relay_addr = svr[0]
relay_port = '443' if parsed.scheme == 'https' else '80'
else:
relay_addr, relay_port = svr
return relay_addr, relay_port
relay_id = str(uuid4())
parsed_req_url = urlparse(req_url)
relay_servers_count = len(relay_servers)
connect_path = '/' + '/'.join(path_str_ls)
if parsed_req_url.path.endswith('/'):
connect_path = connect_path + '/'
for relay_server in relay_servers:
relay_addr, relay_port = get_relay_netloc(relay_server)
connect_url = urlunparse((parsed_req_url.scheme,
relay_addr + ':' + relay_port,
connect_path,
parsed_req_url.params,
parsed_req_url.query,
parsed_req_url.fragment))
if webcaches[relay_server]:
proxy = webcaches[relay_server]
else:
proxy = None
if req.headers.has_key('x-object-manifest'):
object_manifest = req.headers['x-object-manifest']
cont = object_manifest.split('/')[0]
obj = object_manifest.split('/')[1:]
cont_parts = cont.split(':')
if len(cont_parts) >= 2:
real_cont = ':'.join(cont_parts[1:])
object_manifest = real_cont + '/' + '/'.join(obj)
req.headers['x-object-manifest'] = object_manifest
original_url = req.url
self.logger.info('Request[%s]: %s %s with headers = %s, Connect to %s (via %s)' %
(str(relay_id),
req.method, req.url, req.headers,
connect_url, proxy))
result = RelayRequest(self.conf, req, connect_url, proxy=proxy,
conn_timeout=self.conn_timeout,
node_timeout=self.node_timeout,
chunk_size=self.client_chunk_size)()
if isinstance(result, HTTPException):
if relay_servers_count > 1:
relay_servers_count -= 1
self.logger.info('Retry Req[%s]: %s %s with headers = %s, Connect to %s (via %s)' %
(str(relay_id),
req.method, req.url, req.headers,
connect_url, proxy))
continue
else:
return result
if result.getheader('location'):
location = result.getheader('location')
parsed_location = urlparse(location)
parsed_connect_url = urlparse(connect_url)
if parsed_location.netloc.startswith(parsed_connect_url.netloc):
parsed_orig_url = urlparse(original_url)
loc_prefix = parsed_orig_url.path.split('/')[1]
if parsed_orig_url.path.split('/')[1] != self.req_version_str:
rewrited_path = '/' + loc_prefix + parsed_location.path
else:
rewrited_path = parsed_location.path
rewrited_location = (parsed_orig_url.scheme,
parsed_orig_url.netloc,
rewrited_path,
parsed_location.params,
parsed_location.query,
parsed_location.fragment)
response = Response(status='%s %s' % (result.status, result.reason))
response.bytes_transferred = 0
def response_iter():
try:
while True:
with ChunkReadTimeout(self.client_timeout):
chunk = result.read(self.client_chunk_size)
if not chunk:
break
yield chunk
response.bytes_transferred += len(chunk)
except GeneratorExit:
pass
#.........这里部分代码省略.........