diff options
author | Joffrey F <joffrey@docker.com> | 2016-08-01 11:50:57 -0700 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2016-08-02 12:48:32 -0700 |
commit | 9abbe1b7f8cf4e83fea7b115204d50384c9723ed (patch) | |
tree | 338a6449d567851161e36fd0b2eb4f97fd4cbce2 | |
parent | 6f4be1cffc43d97d8070506286e0f15aec4c6b51 (diff) |
Catchable error for parse failures in split_buffer
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r-- | compose/cli/main.py | 3 | ||||
-rw-r--r-- | compose/errors.py | 5 | ||||
-rw-r--r-- | compose/utils.py | 10 |
3 files changed, 13 insertions, 5 deletions
diff --git a/compose/cli/main.py b/compose/cli/main.py index db06a5e1..20200b09 100644 --- a/compose/cli/main.py +++ b/compose/cli/main.py @@ -23,6 +23,7 @@ from ..config.environment import Environment from ..config.serialize import serialize_config from ..const import DEFAULT_TIMEOUT from ..const import IS_WINDOWS_PLATFORM +from ..errors import StreamParseError from ..progress_stream import StreamOutputError from ..project import NoSuchService from ..project import OneOffFilter @@ -75,7 +76,7 @@ def main(): except NeedsBuildError as e: log.error("Service '%s' needs to be built, but --no-build was passed." % e.service.name) sys.exit(1) - except errors.ConnectionError: + except (errors.ConnectionError, StreamParseError): sys.exit(1) diff --git a/compose/errors.py b/compose/errors.py index 9f68760d..376cc555 100644 --- a/compose/errors.py +++ b/compose/errors.py @@ -5,3 +5,8 @@ from __future__ import unicode_literals class OperationFailedError(Exception): def __init__(self, reason): self.msg = reason + + +class StreamParseError(RuntimeError): + def __init__(self, reason): + self.msg = reason diff --git a/compose/utils.py b/compose/utils.py index eea73be1..6d9a9fdc 100644 --- a/compose/utils.py +++ b/compose/utils.py @@ -9,6 +9,8 @@ import logging import six +from .errors import StreamParseError + json_decoder = json.JSONDecoder() log = logging.getLogger(__name__) @@ -64,12 +66,12 @@ def split_buffer(stream, splitter=None, decoder=lambda a: a): if buffered: try: yield decoder(buffered) - except ValueError: + except Exception as e: log.error( - 'Compose tried parsing the following chunk as a JSON object, ' - 'but failed:\n%s' % repr(buffered) + 'Compose tried decoding the following data chunk, but failed:' + '\n%s' % repr(buffered) ) - raise + raise StreamParseError(e) def json_splitter(buffer): |