summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2017-05-05 15:11:24 -0700
committerJoffrey F <joffrey@docker.com>2017-05-05 15:11:24 -0700
commita453aeff5aa5b7bfe7ce381c1f6ab96c05c8e560 (patch)
tree652607625f01cd2a409407ccc4a6fe8262cd4e8e
parent36b2d8149b734c8968e57fa4ce4977c752e672e6 (diff)
parent431f7c6432031b0d405b81e567ffb6cb57c8a6db (diff)
downloaddocker-py-a453aeff5aa5b7bfe7ce381c1f6ab96c05c8e560.tar.gz
Merge branch 'aaronthebaron-1577-multi-success-message'
-rw-r--r--docker/models/images.py27
-rw-r--r--tests/integration/models_images_test.py9
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')