summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2017-09-26 16:25:05 -0700
committerJoffrey F <f.joffrey@gmail.com>2017-10-17 17:20:00 -0700
commit1da5b54d75024bbe5ceae9a296200681caaa77fd (patch)
tree82159bc3e3361a6219531e7c248848a81bd16bfe
parent158a78657854a3f82c94861752996a1951c8d02d (diff)
Fix oneOf validator parser to correctly process uniqueItems errors
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r--compose/config/validation.py15
-rw-r--r--tests/unit/config/config_test.py25
2 files changed, 27 insertions, 13 deletions
diff --git a/compose/config/validation.py b/compose/config/validation.py
index c6722a14..940775a2 100644
--- a/compose/config/validation.py
+++ b/compose/config/validation.py
@@ -325,7 +325,6 @@ def _parse_oneof_validator(error):
"""
types = []
for context in error.context:
-
if context.validator == 'oneOf':
_, error_msg = _parse_oneof_validator(context)
return path_string(context.path), error_msg
@@ -337,6 +336,13 @@ def _parse_oneof_validator(error):
invalid_config_key = parse_key_from_error_msg(context)
return (None, "contains unsupported option: '{}'".format(invalid_config_key))
+ if context.validator == 'uniqueItems':
+ return (
+ path_string(context.path) if context.path else None,
+ "contains non-unique items, please remove duplicates from {}".format(
+ context.instance),
+ )
+
if context.path:
return (
path_string(context.path),
@@ -345,13 +351,6 @@ def _parse_oneof_validator(error):
_parse_valid_types_from_validator(context.validator_value)),
)
- if context.validator == 'uniqueItems':
- return (
- None,
- "contains non unique items, please remove duplicates from {}".format(
- context.instance),
- )
-
if context.validator == 'type':
types.append(context.validator_value)
diff --git a/tests/unit/config/config_test.py b/tests/unit/config/config_test.py
index 14dd0117..de9a6130 100644
--- a/tests/unit/config/config_test.py
+++ b/tests/unit/config/config_test.py
@@ -581,6 +581,20 @@ class ConfigTest(unittest.TestCase):
assert 'Invalid service name \'mong\\o\'' in excinfo.exconly()
+ def test_config_duplicate_cache_from_values_validation_error(self):
+ with pytest.raises(ConfigurationError) as exc:
+ config.load(
+ build_config_details({
+ 'version': '2.3',
+ 'services': {
+ 'test': {'build': {'context': '.', 'cache_from': ['a', 'b', 'a']}}
+ }
+
+ })
+ )
+
+ assert 'build.cache_from contains non-unique items' in exc.exconly()
+
def test_load_with_multiple_files_v1(self):
base_file = config.ConfigFile(
'base.yaml',
@@ -2751,11 +2765,12 @@ class PortsTest(unittest.TestCase):
def check_config(self, cfg):
config.load(
- build_config_details(
- {'web': dict(image='busybox', **cfg)},
- 'working_dir',
- 'filename.yml'
- )
+ build_config_details({
+ 'version': '2.3',
+ 'services': {
+ 'web': dict(image='busybox', **cfg)
+ },
+ }, 'working_dir', 'filename.yml')
)