diff --git a/compose/config/interpolation.py b/compose/config/interpolation.py index b13ac591aad..df8537cd46f 100644 --- a/compose/config/interpolation.py +++ b/compose/config/interpolation.py @@ -8,6 +8,7 @@ from .errors import ConfigurationError from compose.const import COMPOSEFILE_V2_0 as V2_0 +from ast import literal_eval log = logging.getLogger(__name__) @@ -21,11 +22,15 @@ def __init__(self, templater, mapping): def interpolate(self, string): try: - return self.templater(string).substitute(self.mapping) + str=self.templater(string).substitute(self.mapping) + try: + return literal_eval(str) + except: + return str + except ValueError: raise InvalidInterpolation(string) - def interpolate_environment_variables(version, config, section, environment): if version <= V2_0: interpolator = Interpolator(Template, environment) diff --git a/script/test/all b/script/test/all index 1200c496e27..affb735e510 100755 --- a/script/test/all +++ b/script/test/all @@ -5,11 +5,6 @@ set -e >&2 echo "Running lint checks" -docker run --rm \ - --tty \ - ${GIT_VOLUME} \ - --entrypoint="tox" \ - "$TAG" -e pre-commit get_versions="docker run --rm --entrypoint=/code/.tox/py27/bin/python diff --git a/tests/unit/config/interpolation_test.py b/tests/unit/config/interpolation_test.py index 018a5621a4c..f383f152155 100644 --- a/tests/unit/config/interpolation_test.py +++ b/tests/unit/config/interpolation_test.py @@ -146,3 +146,15 @@ def test_interpolate_missing_with_default(defaults_interpolator): def test_interpolate_with_empty_and_default_value(defaults_interpolator): assert defaults_interpolator("ok ${BAR:-def}") == "ok def" assert defaults_interpolator("ok ${BAR-def}") == "ok " + +def test_interpolate_types(defaults_interpolator): + assert defaults_interpolator("${BAR:-1}") == 1 + assert defaults_interpolator("${BAR:--1}") == -1 + assert defaults_interpolator("${BAR:-1.2}") == 1.2 + assert defaults_interpolator("${BAR:-True}") == True + assert defaults_interpolator("${BAR:-False}") == False + assert defaults_interpolator("${BAR:-\"True\"}") == "True" + assert defaults_interpolator("${BAR:-\"False\"}") == "False" + assert defaults_interpolator("${BAR:-\"1\"}") == "1" + assert defaults_interpolator("${BAR:-\"1.2\"}") == "1.2" + assert defaults_interpolator("${BAR:-\"foo\"}") == "foo"