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 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-rc5"]
|
||||
|
||||
def dockerVersions = ["1.13.1", "17.04.0-ce", "17.05.0-ce", "17.06.0-ce"]
|
||||
|
||||
def buildImage = { name, buildargs, pyTag ->
|
||||
img = docker.image(name)
|
||||
|
|
|
@ -262,7 +262,7 @@ class ImageApiMixin(object):
|
|||
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
|
||||
:py:meth:`~docker.api.image.ImageApiMixin.get_image` (or ``docker
|
||||
|
@ -270,9 +270,32 @@ class ImageApiMixin(object):
|
|||
|
||||
Args:
|
||||
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)
|
||||
return self._result(res, True)
|
||||
params = {}
|
||||
|
||||
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')
|
||||
def prune_images(self, filters=None):
|
||||
|
|
|
@ -235,6 +235,9 @@ class ImageCollection(Collection):
|
|||
Args:
|
||||
data (binary): Image data to be loaded.
|
||||
|
||||
Returns:
|
||||
(generator): Progress output as JSON objects
|
||||
|
||||
Raises:
|
||||
:py:class:`docker.errors.APIError`
|
||||
If the server returns an error.
|
||||
|
|
|
@ -249,6 +249,19 @@ class ImportImageTest(BaseAPIIntegrationTest):
|
|||
assert img_data['Config']['Cmd'] == ['echo']
|
||||
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
|
||||
def temporary_http_file_server(self, stream):
|
||||
'''Serve data from an IO stream over HTTP.'''
|
||||
|
|
|
@ -369,5 +369,19 @@ class ImageTest(BaseAPIClientTest):
|
|||
'POST',
|
||||
url_prefix + 'images/load',
|
||||
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
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue