summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2015-01-08 16:23:21 -0800
committerJoffrey F <joffrey@docker.com>2015-01-08 16:23:21 -0800
commit4d3e7eb1cba38bd5e60a89dc9c9a24cbaef863a0 (patch)
treeeacc4341300bad1e4e82509d733875696726b82b
parent7a623c4019a4eeae964a74369a4b0d92821672da (diff)
parent2d34c38c4d792dcf7347875ae6f0f1f45c21e690 (diff)
downloaddocker-py-4d3e7eb1cba38bd5e60a89dc9c9a24cbaef863a0.tar.gz
Merge branch 'master' of https://github.com/rmohr/docker-py into rmohr-master
-rw-r--r--docker/client.py31
-rw-r--r--tests/integration_test.py11
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'])