mirror of https://github.com/docker/docker-py.git
Return generator for output of load_image endpoint
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
56dc7db069
commit
5e4a69bbda
|
@ -5,9 +5,8 @@ def imageNamePy2
|
||||||
def imageNamePy3
|
def imageNamePy3
|
||||||
def images = [:]
|
def images = [:]
|
||||||
|
|
||||||
// Note: Swarm in dind seem notoriously flimsy with 1.12.1+, which is why we're
|
|
||||||
// sticking with 1.12.0 for the 1.12 series
|
def dockerVersions = ["1.13.1", "17.04.0-ce", "17.05.0-ce", "17.06.0-ce"]
|
||||||
def dockerVersions = ["1.13.1", "17.04.0-ce", "17.05.0-ce", "17.06.0-ce-rc5"]
|
|
||||||
|
|
||||||
def buildImage = { name, buildargs, pyTag ->
|
def buildImage = { name, buildargs, pyTag ->
|
||||||
img = docker.image(name)
|
img = docker.image(name)
|
||||||
|
|
|
@ -262,7 +262,7 @@ class ImageApiMixin(object):
|
||||||
self._get(self._url("/images/{0}/json", image)), True
|
self._get(self._url("/images/{0}/json", image)), True
|
||||||
)
|
)
|
||||||
|
|
||||||
def load_image(self, data):
|
def load_image(self, data, quiet=None):
|
||||||
"""
|
"""
|
||||||
Load an image that was previously saved using
|
Load an image that was previously saved using
|
||||||
:py:meth:`~docker.api.image.ImageApiMixin.get_image` (or ``docker
|
:py:meth:`~docker.api.image.ImageApiMixin.get_image` (or ``docker
|
||||||
|
@ -270,9 +270,32 @@ class ImageApiMixin(object):
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
data (binary): Image data to be loaded.
|
data (binary): Image data to be loaded.
|
||||||
|
quiet (boolean): Suppress progress details in response.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
(generator): Progress output as JSON objects. Only available for
|
||||||
|
API version >= 1.23
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
:py:class:`docker.errors.APIError`
|
||||||
|
If the server returns an error.
|
||||||
"""
|
"""
|
||||||
res = self._post(self._url("/images/load"), data=data)
|
params = {}
|
||||||
return self._result(res, True)
|
|
||||||
|
if quiet is not None:
|
||||||
|
if utils.version_lt(self._version, '1.23'):
|
||||||
|
raise errors.InvalidVersion(
|
||||||
|
'quiet is not supported in API version < 1.23'
|
||||||
|
)
|
||||||
|
params['quiet'] = quiet
|
||||||
|
|
||||||
|
res = self._post(
|
||||||
|
self._url("/images/load"), data=data, params=params, stream=True
|
||||||
|
)
|
||||||
|
if utils.version_gte(self._version, '1.23'):
|
||||||
|
return self._stream_helper(res, decode=True)
|
||||||
|
|
||||||
|
self._raise_for_status(res)
|
||||||
|
|
||||||
@utils.minimum_version('1.25')
|
@utils.minimum_version('1.25')
|
||||||
def prune_images(self, filters=None):
|
def prune_images(self, filters=None):
|
||||||
|
|
|
@ -235,6 +235,9 @@ class ImageCollection(Collection):
|
||||||
Args:
|
Args:
|
||||||
data (binary): Image data to be loaded.
|
data (binary): Image data to be loaded.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
(generator): Progress output as JSON objects
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
:py:class:`docker.errors.APIError`
|
:py:class:`docker.errors.APIError`
|
||||||
If the server returns an error.
|
If the server returns an error.
|
||||||
|
|
|
@ -249,6 +249,19 @@ class ImportImageTest(BaseAPIIntegrationTest):
|
||||||
assert img_data['Config']['Cmd'] == ['echo']
|
assert img_data['Config']['Cmd'] == ['echo']
|
||||||
assert img_data['Config']['User'] == 'foobar'
|
assert img_data['Config']['User'] == 'foobar'
|
||||||
|
|
||||||
|
# Docs say output is available in 1.23, but this test fails on 1.12.0
|
||||||
|
@requires_api_version('1.24')
|
||||||
|
def test_get_load_image(self):
|
||||||
|
test_img = 'hello-world:latest'
|
||||||
|
self.client.pull(test_img)
|
||||||
|
data = self.client.get_image(test_img)
|
||||||
|
assert data
|
||||||
|
output = self.client.load_image(data)
|
||||||
|
assert any([
|
||||||
|
line for line in output
|
||||||
|
if 'Loaded image: {}'.format(test_img) in line.get('stream', '')
|
||||||
|
])
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def temporary_http_file_server(self, stream):
|
def temporary_http_file_server(self, stream):
|
||||||
'''Serve data from an IO stream over HTTP.'''
|
'''Serve data from an IO stream over HTTP.'''
|
||||||
|
|
|
@ -369,5 +369,19 @@ class ImageTest(BaseAPIClientTest):
|
||||||
'POST',
|
'POST',
|
||||||
url_prefix + 'images/load',
|
url_prefix + 'images/load',
|
||||||
data='Byte Stream....',
|
data='Byte Stream....',
|
||||||
|
stream=True,
|
||||||
|
params={},
|
||||||
|
timeout=DEFAULT_TIMEOUT_SECONDS
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_load_image_quiet(self):
|
||||||
|
self.client.load_image('Byte Stream....', quiet=True)
|
||||||
|
|
||||||
|
fake_request.assert_called_with(
|
||||||
|
'POST',
|
||||||
|
url_prefix + 'images/load',
|
||||||
|
data='Byte Stream....',
|
||||||
|
stream=True,
|
||||||
|
params={'quiet': True},
|
||||||
timeout=DEFAULT_TIMEOUT_SECONDS
|
timeout=DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue