diff options
author | Joffrey F <joffrey@docker.com> | 2018-10-04 01:09:48 -0700 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2018-10-04 01:09:48 -0700 |
commit | cc595a65f04487b77d4779b9580b573b50ddcdb6 (patch) | |
tree | 0f5fe6d79683c2540851ae6a1ce0d2d2a8bf8c03 | |
parent | 7208a50bdc6d6f892e38bae9575d20f663f2bf0c (diff) |
Don't attempt iterating on None during parallel pull
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r-- | compose/project.py | 11 | ||||
-rw-r--r-- | compose/utils.py | 6 | ||||
-rw-r--r-- | tests/integration/project_test.py | 17 |
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', |