diff options
author | Joffrey F <joffrey@docker.com> | 2017-05-05 15:11:24 -0700 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2017-05-05 15:11:24 -0700 |
commit | a453aeff5aa5b7bfe7ce381c1f6ab96c05c8e560 (patch) | |
tree | 652607625f01cd2a409407ccc4a6fe8262cd4e8e | |
parent | 36b2d8149b734c8968e57fa4ce4977c752e672e6 (diff) | |
parent | 431f7c6432031b0d405b81e567ffb6cb57c8a6db (diff) | |
download | docker-py-a453aeff5aa5b7bfe7ce381c1f6ab96c05c8e560.tar.gz |
Merge branch 'aaronthebaron-1577-multi-success-message'
-rw-r--r-- | docker/models/images.py | 27 | ||||
-rw-r--r-- | tests/integration/models_images_test.py | 9 |
2 files changed, 24 insertions, 12 deletions
diff --git a/docker/models/images.py b/docker/models/images.py index 3fd3dc1..48f3590 100644 --- a/docker/models/images.py +++ b/docker/models/images.py @@ -166,18 +166,21 @@ class ImageCollection(Collection): resp = self.client.api.build(**kwargs) if isinstance(resp, six.string_types): return self.get(resp) - events = list(json_stream(resp)) - if not events: - return BuildError('Unknown') - event = events[-1] - if 'stream' in event: - match = re.search(r'(Successfully built |sha256:)([0-9a-f]+)', - event.get('stream', '')) - if match: - image_id = match.group(2) - return self.get(image_id) - - raise BuildError(event.get('error') or event) + last_event = None + for chunk in json_stream(resp): + if 'error' in chunk: + raise BuildError(chunk['error']) + if 'stream' in chunk: + match = re.search( + r'(Successfully built |sha256:)([0-9a-f]+)', + chunk['stream'] + ) + if match: + image_id = match.group(2) + return self.get(image_id) + last_event = chunk + + raise BuildError(last_event or 'Unknown') def get(self, name): """ diff --git a/tests/integration/models_images_test.py b/tests/integration/models_images_test.py index 4f8bb26..49e06f6 100644 --- a/tests/integration/models_images_test.py +++ b/tests/integration/models_images_test.py @@ -28,6 +28,15 @@ class ImageCollectionTest(BaseIntegrationTest): assert str(cm.exception) == ("Unknown instruction: " "NOTADOCKERFILECOMMAND") + def test_build_with_multiple_success(self): + client = docker.from_env(version=TEST_API_VERSION) + image = client.images.build(tag='some-tag', fileobj=io.BytesIO( + "FROM alpine\n" + "CMD echo hello world".encode('ascii') + )) + self.tmp_imgs.append(image.id) + assert client.containers.run(image) == b"hello world\n" + def test_list(self): client = docker.from_env(version=TEST_API_VERSION) image = client.images.pull('alpine:latest') |