diff options
author | Joffrey F <joffrey@docker.com> | 2018-11-28 11:24:21 -0800 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2018-11-28 11:27:04 -0800 |
commit | c53423f11851a69fa18783b5b0b801a24d8d2f82 (patch) | |
tree | c481d3ac2096d7e1f6b0e6ee2fdffe670f685d14 | |
parent | a74d546864b64ba03dce1e3407d3b0cd5badee9f (diff) | |
download | docker-py-adw1n-i2116.tar.gz |
Update DockerClient.images.pull to always stream responseadw1n-i2116
Also raise a warning when users attempt to specify the "stream" parameter
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r-- | docker/models/images.py | 18 | ||||
-rw-r--r-- | tests/unit/models_containers_test.py | 5 | ||||
-rw-r--r-- | tests/unit/models_images_test.py | 24 |
3 files changed, 38 insertions, 9 deletions
diff --git a/docker/models/images.py b/docker/models/images.py index f8b842a..30e86f1 100644 --- a/docker/models/images.py +++ b/docker/models/images.py @@ -1,5 +1,6 @@ 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 ':' diff --git a/tests/unit/models_containers_test.py b/tests/unit/models_containers_test.py index 957035a..39e409e 100644 --- a/tests/unit/models_containers_test.py +++ b/tests/unit/models_containers_test.py @@ -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() diff --git a/tests/unit/models_images_test.py b/tests/unit/models_images_test.py index ef81a15..fd894ab 100644 --- a/tests/unit/models_images_test.py +++ b/tests/unit/models_images_test.py @@ -1,6 +1,8 @@ +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) |