|
32 | 32 | from ..tls import TLSConfig |
33 | 33 | from ..transport import SSLAdapter, UnixAdapter |
34 | 34 | from ..utils import utils, check_resource, update_headers |
35 | | -from ..utils.socket import frames_iter |
| 35 | +from ..utils.socket import frames_iter, socket_raw_iter |
36 | 36 | from ..utils.json_stream import json_stream |
37 | 37 | try: |
38 | 38 | from ..transport import NpipeAdapter |
@@ -362,13 +362,19 @@ def _stream_raw_result(self, response): |
362 | 362 | for out in response.iter_content(chunk_size=1, decode_unicode=True): |
363 | 363 | yield out |
364 | 364 |
|
365 | | - def _read_from_socket(self, response, stream): |
| 365 | + def _read_from_socket(self, response, stream, tty=False): |
366 | 366 | socket = self._get_raw_response_socket(response) |
367 | 367 |
|
| 368 | + gen = None |
| 369 | + if tty is False: |
| 370 | + gen = frames_iter(socket) |
| 371 | + else: |
| 372 | + gen = socket_raw_iter(socket) |
| 373 | + |
368 | 374 | if stream: |
369 | | - return frames_iter(socket) |
| 375 | + return gen |
370 | 376 | else: |
371 | | - return six.binary_type().join(frames_iter(socket)) |
| 377 | + return six.binary_type().join(gen) |
372 | 378 |
|
373 | 379 | def _disable_socket_timeout(self, socket): |
374 | 380 | """ Depending on the combination of python version and whether we're |
@@ -398,9 +404,13 @@ def _disable_socket_timeout(self, socket): |
398 | 404 |
|
399 | 405 | s.settimeout(None) |
400 | 406 |
|
401 | | - def _get_result(self, container, stream, res): |
| 407 | + @check_resource('container') |
| 408 | + def _check_is_tty(self, container): |
402 | 409 | cont = self.inspect_container(container) |
403 | | - return self._get_result_tty(stream, res, cont['Config']['Tty']) |
| 410 | + return cont['Config']['Tty'] |
| 411 | + |
| 412 | + def _get_result(self, container, stream, res): |
| 413 | + return self._get_result_tty(stream, res, self._check_is_tty(container)) |
404 | 414 |
|
405 | 415 | def _get_result_tty(self, stream, res, is_tty): |
406 | 416 | # Stream multi-plexing was only introduced in API v1.6. Anything |
|
0 commit comments