From 9430e5bf9d39bb72cd5f0914a1f52c3999234c08 Mon Sep 17 00:00:00 2001
From: Joffrey F <joffrey@docker.com>
Date: Wed, 27 Sep 2017 18:24:46 -0700
Subject: [PATCH] Avoid import ConfigurationError inside compose.utils
 (circular import)

Signed-off-by: Joffrey F <joffrey@docker.com>
---
 compose/config/config.py | 5 ++++-
 compose/utils.py         | 3 +--
 tests/unit/utils_test.py | 8 ++++++++
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/compose/config/config.py b/compose/config/config.py
index 0fddfd3a4..b90ab0305 100644
--- a/compose/config/config.py
+++ b/compose/config/config.py
@@ -762,7 +762,10 @@ def process_blkio_config(service_dict):
     for field in ['device_read_bps', 'device_write_bps']:
         if field in service_dict['blkio_config']:
             for v in service_dict['blkio_config'].get(field, []):
-                v['rate'] = parse_bytes(v.get('rate', 0))
+                rate = v.get('rate', 0)
+                v['rate'] = parse_bytes(rate)
+                if v['rate'] is None:
+                    raise ConfigurationError('Invalid format for bytes value: "{}"'.format(rate))
 
     for field in ['device_read_iops', 'device_write_iops']:
         if field in service_dict['blkio_config']:
diff --git a/compose/utils.py b/compose/utils.py
index 1ede4d37d..197ae6eb2 100644
--- a/compose/utils.py
+++ b/compose/utils.py
@@ -12,7 +12,6 @@ import six
 from docker.errors import DockerException
 from docker.utils import parse_bytes as sdk_parse_bytes
 
-from .config.errors import ConfigurationError
 from .errors import StreamParseError
 from .timeparse import MULTIPLIERS
 from .timeparse import timeparse
@@ -143,4 +142,4 @@ def parse_bytes(n):
     try:
         return sdk_parse_bytes(n)
     except DockerException:
-        raise ConfigurationError('Invalid format for bytes value: {}'.format(n))
+        return None
diff --git a/tests/unit/utils_test.py b/tests/unit/utils_test.py
index 85231957e..84becb975 100644
--- a/tests/unit/utils_test.py
+++ b/tests/unit/utils_test.py
@@ -60,3 +60,11 @@ class TestJsonStream(object):
             {'three': 'four'},
             {'x': 2}
         ]
+
+
+class TestParseBytes(object):
+    def test_parse_bytes(self):
+        assert utils.parse_bytes('123kb') == 123 * 1024
+        assert utils.parse_bytes(123) == 123
+        assert utils.parse_bytes('foobar') is None
+        assert utils.parse_bytes('123') == 123