diff options
Diffstat (limited to 'docker/api')
-rw-r--r-- | docker/api/client.py | 22 | ||||
-rw-r--r-- | docker/api/container.py | 4 | ||||
-rw-r--r-- | docker/api/exec_api.py | 2 |
3 files changed, 20 insertions, 8 deletions
diff --git a/docker/api/client.py b/docker/api/client.py index 65b5baa..1de10c7 100644 --- a/docker/api/client.py +++ b/docker/api/client.py @@ -32,7 +32,7 @@ from ..errors import ( from ..tls import TLSConfig from ..transport import SSLAdapter, UnixAdapter from ..utils import utils, check_resource, update_headers -from ..utils.socket import frames_iter +from ..utils.socket import frames_iter, socket_raw_iter from ..utils.json_stream import json_stream try: from ..transport import NpipeAdapter @@ -362,13 +362,19 @@ class APIClient( for out in response.iter_content(chunk_size=1, decode_unicode=True): yield out - def _read_from_socket(self, response, stream): + def _read_from_socket(self, response, stream, tty=False): socket = self._get_raw_response_socket(response) + gen = None + if tty is False: + gen = frames_iter(socket) + else: + gen = socket_raw_iter(socket) + if stream: - return frames_iter(socket) + return gen else: - return six.binary_type().join(frames_iter(socket)) + return six.binary_type().join(gen) def _disable_socket_timeout(self, socket): """ Depending on the combination of python version and whether we're @@ -398,9 +404,13 @@ class APIClient( s.settimeout(None) - def _get_result(self, container, stream, res): + @check_resource('container') + def _check_is_tty(self, container): cont = self.inspect_container(container) - return self._get_result_tty(stream, res, cont['Config']['Tty']) + return cont['Config']['Tty'] + + def _get_result(self, container, stream, res): + return self._get_result_tty(stream, res, self._check_is_tty(container)) def _get_result_tty(self, stream, res, is_tty): # Stream multi-plexing was only introduced in API v1.6. Anything diff --git a/docker/api/container.py b/docker/api/container.py index 06c575d..dde1325 100644 --- a/docker/api/container.py +++ b/docker/api/container.py @@ -52,7 +52,9 @@ class ContainerApiMixin(object): u = self._url("/containers/{0}/attach", container) response = self._post(u, headers=headers, params=params, stream=stream) - return self._read_from_socket(response, stream) + return self._read_from_socket( + response, stream, self._check_is_tty(container) + ) @utils.check_resource('container') def attach_socket(self, container, params=None, ws=False): diff --git a/docker/api/exec_api.py b/docker/api/exec_api.py index 2b407ce..6f42524 100644 --- a/docker/api/exec_api.py +++ b/docker/api/exec_api.py @@ -153,4 +153,4 @@ class ExecApiMixin(object): return self._result(res) if socket: return self._get_raw_response_socket(res) - return self._read_from_socket(res, stream) + return self._read_from_socket(res, stream, tty) |