Properly handle APIError failures in Project.up

Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
Joffrey F 2016-04-29 19:42:07 -07:00
commit 3c424b709e
5 changed files with 18 additions and 5 deletions

View file

@ -24,6 +24,7 @@ from ..const import IS_WINDOWS_PLATFORM
from ..progress_stream import StreamOutputError
from ..project import NoSuchService
from ..project import OneOffFilter
from ..project import ProjectError
from ..service import BuildAction
from ..service import BuildError
from ..service import ConvergenceStrategy
@ -58,7 +59,7 @@ def main():
except (KeyboardInterrupt, signals.ShutdownException):
log.error("Aborting.")
sys.exit(1)
except (UserError, NoSuchService, ConfigurationError) as e:
except (UserError, NoSuchService, ConfigurationError, ProjectError) as e:
log.error(e.msg)
sys.exit(1)
except BuildError as e:

View file

@ -59,7 +59,7 @@ def parallel_execute(objects, func, get_name, msg, get_deps=None):
if error_to_reraise:
raise error_to_reraise
return results
return results, errors
def _no_deps(x):

View file

@ -390,13 +390,18 @@ class Project(object):
def get_deps(service):
return {self.get_service(dep) for dep in service.get_dependency_names()}
results = parallel.parallel_execute(
results, errors = parallel.parallel_execute(
services,
do,
operator.attrgetter('name'),
None,
get_deps
)
if errors:
raise ProjectError(
'Encountered errors while bringing up the project.'
)
return [
container
for svc_containers in results
@ -531,3 +536,7 @@ class NoSuchService(Exception):
def __str__(self):
return self.msg
class ProjectError(Exception):
pass