summaryrefslogtreecommitdiff
path: root/swiftclient
diff options
context:
space:
mode:
Diffstat (limited to 'swiftclient')
-rw-r--r--swiftclient/client.py39
1 files changed, 32 insertions, 7 deletions
diff --git a/swiftclient/client.py b/swiftclient/client.py
index 0c6d8d3..87b3e5a 100644
--- a/swiftclient/client.py
+++ b/swiftclient/client.py
@@ -138,6 +138,37 @@ def encode_meta_headers(headers):
return ret
+class _ObjectBody(object):
+ """
+ Readable and iterable object body response wrapper.
+ """
+
+ def __init__(self, resp, chunk_size):
+ """
+ Wrap the underlying response
+
+ :param resp: the response to wrap
+ :param chunk_size: number of bytes to return each iteration/next call
+ """
+ self.resp = resp
+ self.chunk_size = chunk_size
+
+ def read(self, length=None):
+ return self.resp.read(length)
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ buf = self.resp.read(self.chunk_size)
+ if not buf:
+ raise StopIteration()
+ return buf
+
+ def __next__(self):
+ return self.next()
+
+
class HTTPConnection(object):
def __init__(self, url, proxy=None, cacert=None, insecure=False,
ssl_compression=False, default_user_agent=None):
@@ -874,13 +905,7 @@ def get_object(url, token, container, name, http_conn=None,
http_reason=resp.reason,
http_response_content=body)
if resp_chunk_size:
-
- def _object_body():
- buf = resp.read(resp_chunk_size)
- while buf:
- yield buf
- buf = resp.read(resp_chunk_size)
- object_body = _object_body()
+ object_body = _ObjectBody(resp, resp_chunk_size)
else:
object_body = resp.read()
http_log(('%s%s' % (url.replace(parsed.path, ''), path), method,),