Merge pull request #4529 from shin-/3528-invalid-service-name

Detect the service that causes the invalid service name error
This commit is contained in:
Joffrey F 2017-02-24 17:47:41 -08:00 committed by GitHub
commit 7e8dcc847b
2 changed files with 20 additions and 3 deletions

View File

@ -211,9 +211,12 @@ def handle_error_for_schema_with_id(error, path):
if is_service_dict_schema(schema_id) and error.validator == 'additionalProperties':
return "Invalid service name '{}' - only {} characters are allowed".format(
# The service_name is the key to the json object
list(error.instance)[0],
VALID_NAME_CHARS)
# The service_name is one of the keys in the json object
[i for i in list(error.instance) if not i or any(filter(
lambda c: not re.match(VALID_NAME_CHARS, c), i
))][0],
VALID_NAME_CHARS
)
if error.validator == 'additionalProperties':
if schema_id == '#/definitions/service':

View File

@ -554,6 +554,20 @@ class ConfigTest(unittest.TestCase):
excinfo.exconly()
)
def test_config_invalid_service_name_raise_validation_error(self):
with pytest.raises(ConfigurationError) as excinfo:
config.load(
build_config_details({
'version': '2',
'services': {
'test_app': {'build': '.'},
'mong\\o': {'image': 'mongo'},
}
})
)
assert 'Invalid service name \'mong\\o\'' in excinfo.exconly()
def test_load_with_multiple_files_v1(self):
base_file = config.ConfigFile(
'base.yaml',