Kaydet (Commit) c53423f1 authored tarafından Joffrey F's avatar Joffrey F

Update DockerClient.images.pull to always stream response

Also raise a warning when users attempt to specify the "stream" parameter
Signed-off-by: 's avatarJoffrey F <joffrey@docker.com>
üst a74d5468
import itertools
import re
import warnings
import six
......@@ -425,8 +426,21 @@ class ImageCollection(Collection):
if not tag:
repository, tag = parse_repository_tag(repository)
kwargs['stream'] = False
self.client.api.pull(repository, tag=tag, **kwargs)
if 'stream' in kwargs:
warnings.warn(
'`stream` is not a valid parameter for this method'
' and will be overridden'
)
del kwargs['stream']
pull_log = self.client.api.pull(
repository, tag=tag, stream=True, **kwargs
)
for _ in pull_log:
# We don't do anything with the logs, but we need
# to keep the connection alive and wait for the image
# to be pulled.
pass
if tag:
return self.get('{0}{2}{1}'.format(
repository, tag, '@' if tag.startswith('sha256:') else ':'
......
......@@ -232,8 +232,9 @@ class ContainerCollectionTest(unittest.TestCase):
container = client.containers.run('alpine', 'sleep 300', detach=True)
assert container.id == FAKE_CONTAINER_ID
client.api.pull.assert_called_with('alpine', platform=None, tag=None,
stream=False)
client.api.pull.assert_called_with(
'alpine', platform=None, tag=None, stream=True
)
def test_run_with_error(self):
client = make_fake_client()
......
import unittest
import warnings
from docker.constants import DEFAULT_DATA_CHUNK_SIZE
from docker.models.images import Image
import unittest
from .fake_api import FAKE_IMAGE_ID
from .fake_api_client import make_fake_client
......@@ -43,8 +45,9 @@ class ImageCollectionTest(unittest.TestCase):
def test_pull(self):
client = make_fake_client()
image = client.images.pull('test_image:latest')
client.api.pull.assert_called_with('test_image', tag='latest',
stream=False)
client.api.pull.assert_called_with(
'test_image', tag='latest', stream=True
)
client.api.inspect_image.assert_called_with('test_image:latest')
assert isinstance(image, Image)
assert image.id == FAKE_IMAGE_ID
......@@ -52,8 +55,9 @@ class ImageCollectionTest(unittest.TestCase):
def test_pull_multiple(self):
client = make_fake_client()
images = client.images.pull('test_image')
client.api.pull.assert_called_with('test_image', tag=None,
stream=False)
client.api.pull.assert_called_with(
'test_image', tag=None, stream=True
)
client.api.images.assert_called_with(
all=False, name='test_image', filters=None
)
......@@ -63,6 +67,16 @@ class ImageCollectionTest(unittest.TestCase):
assert isinstance(image, Image)
assert image.id == FAKE_IMAGE_ID
def test_pull_with_stream_param(self):
client = make_fake_client()
with warnings.catch_warnings(record=True) as w:
client.images.pull('test_image', stream=True)
assert len(w) == 1
assert str(w[0].message).startswith(
'`stream` is not a valid parameter'
)
def test_push(self):
client = make_fake_client()
client.images.push('foobar', insecure_registry=True)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment