Pre-process validation steps
In order to validate a service name that has been specified as an integer we need to run that as a pre-process validation step *before* we pass the config to be validated against the schema. It is not possible to validate it *in* the schema, it causes a type error. Even though a number is a valid service name, it must be a cast as a string within the yaml to avoid type error. Taken this opportunity to move the code design in a direction towards: 1. pre-process 2. validate 3. construct Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
This commit is contained in:
parent
c443e95f07
commit
67995ab9e3
3 changed files with 54 additions and 8 deletions
|
|
@ -1,3 +1,4 @@
|
|||
from functools import wraps
|
||||
import os
|
||||
|
||||
from docker.utils.ports import split_port
|
||||
|
|
@ -36,6 +37,29 @@ def format_ports(instance):
|
|||
return True
|
||||
|
||||
|
||||
def validate_service_names(func):
|
||||
@wraps(func)
|
||||
def func_wrapper(config):
|
||||
for service_name in config.keys():
|
||||
if type(service_name) is int:
|
||||
raise ConfigurationError(
|
||||
"Service name: {} needs to be a string, eg '{}'".format(service_name, service_name)
|
||||
)
|
||||
return func(config)
|
||||
return func_wrapper
|
||||
|
||||
|
||||
def validate_top_level_object(func):
|
||||
@wraps(func)
|
||||
def func_wrapper(config):
|
||||
if not isinstance(config, dict):
|
||||
raise ConfigurationError(
|
||||
"Top level object needs to be a dictionary. Check your .yml file that you have defined a service at the top level."
|
||||
)
|
||||
return func(config)
|
||||
return func_wrapper
|
||||
|
||||
|
||||
def get_unsupported_config_msg(service_name, error_key):
|
||||
msg = "Unsupported config option for '{}' service: '{}'".format(service_name, error_key)
|
||||
if error_key in DOCKER_CONFIG_HINTS:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue