From d0985b02befc573719afb9f2aa02b6a110f442ea Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Wed, 19 Mar 2014 08:41:59 -0700 Subject: [PATCH 1/2] Ensure that stream=True is passed to requests when version >= 1.8 --- docker/client.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docker/client.py b/docker/client.py index d8f79c92..84308b8a 100644 --- a/docker/client.py +++ b/docker/client.py @@ -349,6 +349,9 @@ class Client(requests.Session): else: context = utils.tar(path) + if utils.compare_version('1.8', self._version) >= 0: + stream = True + u = self._url('/build') params = { 't': tag, @@ -372,7 +375,7 @@ class Client(requests.Session): if context is not None: context.close() - if stream or utils.compare_version('1.8', self._version) >= 0: + if stream: return self._stream_helper(response) else: output = self._result(response) From e8b993ab8ad687febda232c9e55e553b0a6f5a74 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Wed, 19 Mar 2014 08:43:13 -0700 Subject: [PATCH 2/2] Use requests to read chunk data instead of parsing the raw stream The previous code had a bug in which it assumed that the chunk data had no newlines in it. In 0.9.0 newlines were added to the stream results, which exposed this bug. --- docker/client.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/docker/client.py b/docker/client.py index 84308b8a..38355b09 100644 --- a/docker/client.py +++ b/docker/client.py @@ -233,17 +233,8 @@ class Client(requests.Session): def _stream_helper(self, response): """Generator for data coming from a chunked-encoded HTTP response.""" - socket_fp = self._get_raw_response_socket(response) - socket_fp.setblocking(1) - socket = socket_fp.makefile() - while True: - size = int(socket.readline(), 16) - if size <= 0: - break - data = socket.readline() - if not data: - break - yield data + for line in response.iter_lines(chunk_size=32): + yield line def _multiplexed_buffer_helper(self, response): """A generator of multiplexed data blocks read from a buffered