summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2018-10-04 01:09:48 -0700
committerJoffrey F <joffrey@docker.com>2018-10-04 01:09:48 -0700
commitcc595a65f04487b77d4779b9580b573b50ddcdb6 (patch)
tree0f5fe6d79683c2540851ae6a1ce0d2d2a8bf8c03
parent7208a50bdc6d6f892e38bae9575d20f663f2bf0c (diff)
Don't attempt iterating on None during parallel pull
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r--compose/project.py11
-rw-r--r--compose/utils.py6
-rw-r--r--tests/integration/project_test.py17
3 files changed, 28 insertions, 6 deletions
diff --git a/compose/project.py b/compose/project.py
index 4340577c..92c35205 100644
--- a/compose/project.py
+++ b/compose/project.py
@@ -34,6 +34,7 @@ from .service import Service
from .service import ServiceNetworkMode
from .service import ServicePidMode
from .utils import microseconds_from_time_nano
+from .utils import truncate_string
from .volume import ProjectVolumes
@@ -554,12 +555,10 @@ class Project(object):
if parallel_pull:
def pull_service(service):
strm = service.pull(ignore_pull_failures, True, stream=True)
- writer = parallel.get_stream_writer()
+ if strm is None: # Attempting to pull service with no `image` key is a no-op
+ return
- def trunc(s):
- if len(s) > 35:
- return s[:33] + '...'
- return s
+ writer = parallel.get_stream_writer()
for event in strm:
if 'status' not in event:
@@ -572,7 +571,7 @@ class Project(object):
status = '{} ({:.1%})'.format(status, percentage)
writer.write(
- msg, service.name, trunc(status), lambda s: s
+ msg, service.name, truncate_string(status), lambda s: s
)
_, errors = parallel.parallel_execute(
diff --git a/compose/utils.py b/compose/utils.py
index 72e6ced1..9f0441d0 100644
--- a/compose/utils.py
+++ b/compose/utils.py
@@ -180,3 +180,9 @@ def unique_everseen(iterable, key=lambda x: x):
if unique_key not in seen:
seen.add(unique_key)
yield element
+
+
+def truncate_string(s, max_chars=35):
+ if len(s) > max_chars:
+ return s[:max_chars - 2] + '...'
+ return s
diff --git a/tests/integration/project_test.py b/tests/integration/project_test.py
index 63939676..57f3b707 100644
--- a/tests/integration/project_test.py
+++ b/tests/integration/project_test.py
@@ -105,6 +105,23 @@ class ProjectTest(DockerClientTestCase):
project = Project('composetest', [web, db], self.client)
assert set(project.containers(stopped=True)) == set([web_1, db_1])
+ def test_parallel_pull_with_no_image(self):
+ config_data = build_config(
+ version=V2_3,
+ services=[{
+ 'name': 'web',
+ 'build': {'context': '.'},
+ }],
+ )
+
+ project = Project.from_config(
+ name='composetest',
+ config_data=config_data,
+ client=self.client
+ )
+
+ project.pull(parallel_pull=True)
+
def test_volumes_from_service(self):
project = Project.from_config(
name='composetest',