|
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