From ecc1429453fa7727e749ecceee069253f154aea6 Mon Sep 17 00:00:00 2001 From: Corey Pauley Date: Mon, 24 Jul 2017 11:00:01 -0500 Subject: [PATCH] Added support for default value when environment variable is missing (#8484) * Added support for a default value when an environment variable is missing * Shouldn't have used docstring --- homeassistant/util/yaml.py | 9 +++++++-- tests/util/test_yaml.py | 7 +++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/homeassistant/util/yaml.py b/homeassistant/util/yaml.py index fb682ac6f19..4129a67bf57 100644 --- a/homeassistant/util/yaml.py +++ b/homeassistant/util/yaml.py @@ -205,8 +205,13 @@ def _construct_seq(loader: SafeLineLoader, node: yaml.nodes.Node): def _env_var_yaml(loader: SafeLineLoader, node: yaml.nodes.Node): """Load environment variables and embed it into the configuration YAML.""" - if node.value in os.environ: - return os.environ[node.value] + args = node.value.split() + + # Check for a default value + if len(args) > 1: + return os.getenv(args[0], ' '.join(args[1:])) + elif args[0] in os.environ: + return os.environ[args[0]] else: _LOGGER.error("Environment variable %s not defined.", node.value) raise HomeAssistantError(node.value) diff --git a/tests/util/test_yaml.py b/tests/util/test_yaml.py index c2eda2401f5..a15efb7a77e 100644 --- a/tests/util/test_yaml.py +++ b/tests/util/test_yaml.py @@ -60,6 +60,13 @@ class TestYaml(unittest.TestCase): assert doc['password'] == "secret_password" del os.environ["PASSWORD"] + def test_environment_variable_default(self): + """Test config file with default value for environment variable.""" + conf = "password: !env_var PASSWORD secret_password" + with io.StringIO(conf) as file: + doc = yaml.yaml.safe_load(file) + assert doc['password'] == "secret_password" + def test_invalid_enviroment_variable(self): """Test config file with no enviroment variable sat.""" conf = "password: !env_var PASSWORD"