summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2016-08-01 11:50:57 -0700
committerJoffrey F <joffrey@docker.com>2016-08-02 12:48:32 -0700
commit9abbe1b7f8cf4e83fea7b115204d50384c9723ed (patch)
tree338a6449d567851161e36fd0b2eb4f97fd4cbce2
parent6f4be1cffc43d97d8070506286e0f15aec4c6b51 (diff)
Catchable error for parse failures in split_buffer
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r--compose/cli/main.py3
-rw-r--r--compose/errors.py5
-rw-r--r--compose/utils.py10
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):