diff options
author | Joffrey F <joffrey@docker.com> | 2015-01-08 16:23:21 -0800 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2015-01-08 16:23:21 -0800 |
commit | 4d3e7eb1cba38bd5e60a89dc9c9a24cbaef863a0 (patch) | |
tree | eacc4341300bad1e4e82509d733875696726b82b | |
parent | 7a623c4019a4eeae964a74369a4b0d92821672da (diff) | |
parent | 2d34c38c4d792dcf7347875ae6f0f1f45c21e690 (diff) | |
download | docker-py-4d3e7eb1cba38bd5e60a89dc9c9a24cbaef863a0.tar.gz |
Merge branch 'master' of https://github.com/rmohr/docker-py into rmohr-master
-rw-r--r-- | docker/client.py | 31 | ||||
-rw-r--r-- | tests/integration_test.py | 11 |
2 files changed, 30 insertions, 12 deletions
diff --git a/docker/client.py b/docker/client.py index 907c281..7e026ca 100644 --- a/docker/client.py +++ b/docker/client.py @@ -274,18 +274,19 @@ class Client(requests.Session): def _get_raw_response_socket(self, response): self._raise_for_status(response) if six.PY3: - sock = response.raw._fp.fp.raw._sock + sock = response.raw._fp.fp.raw + sock._response = response else: sock = response.raw._fp.fp._sock - try: - # Keep a reference to the response to stop it being garbage - # collected. If the response is garbage collected, it will close - # TLS sockets. - sock._response = response - except AttributeError: - # UNIX sockets can't have attributes set on them, but that's fine - # because we won't be doing TLS over them - pass + try: + # Keep a reference to the response to stop it being garbage + # collected. If the response is garbage collected, it will + # close TLS sockets. + sock._response = response + except AttributeError: + # UNIX sockets can't have attributes set on them, but that's + # fine because we won't be doing TLS over them + pass return sock @@ -328,7 +329,10 @@ class Client(requests.Session): def recvall(socket, size): blocks = [] while size > 0: - block = socket.recv(size) + if six.PY3: + block = socket._sock.recv(size) + else: + block = socket.recv(size) if not block: return None @@ -340,7 +344,10 @@ class Client(requests.Session): return data while True: - socket.settimeout(None) + if six.PY3: + socket._sock.settimeout(None) + else: + socket.settimeout(None) header = recvall(socket, STREAM_HEADER_SIZE_BYTES) if not header: break diff --git a/tests/integration_test.py b/tests/integration_test.py index 4710559..666215d 100644 --- a/tests/integration_test.py +++ b/tests/integration_test.py @@ -870,6 +870,17 @@ class TestExecuteCommandStreaming(BaseTestCase): self.assertEqual(res, expected) +class TestRunContainerStreaming(BaseTestCase): + def runTest(self): + container = self.client.create_container('busybox', '/bin/sh', + detach=True, stdin_open=True) + id = container['Id'] + self.client.start(id) + self.tmp_containers.append(id) + socket = self.client.attach_socket(container, ws=False) + self.assertTrue(socket.fileno() > -1) + + class TestPauseUnpauseContainer(BaseTestCase): def runTest(self): container = self.client.create_container('busybox', ['sleep', '9999']) |