From 20c520aa17a7d580cc5ab9e6805f7b81d5c47de9 Mon Sep 17 00:00:00 2001 From: Matthias Bisping Date: Thu, 21 Apr 2022 16:02:43 +0200 Subject: [PATCH] fixed env var parser --- pyinfra/config.py | 3 ++- pyinfra/test/unit_tests/config_test.py | 9 ++++++++- pyinfra/visitor.py | 6 ++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pyinfra/config.py b/pyinfra/config.py index c306e19..072a52e 100644 --- a/pyinfra/config.py +++ b/pyinfra/config.py @@ -1,6 +1,7 @@ """Implements a config object with dot-indexing syntax.""" import os from itertools import chain +from operator import truth from envyaml import EnvYAML from funcy import first, juxt, butlast, last @@ -51,4 +52,4 @@ def parse_disjunction_string(disjunction_string): options = disjunction_string.split("|") identifiers, fallback_value = juxt(butlast, last)(options) - return first(chain(filter(try_parse_env_var, identifiers), [fallback_value])) + return first(chain(filter(truth, map(try_parse_env_var, identifiers)), [fallback_value])) diff --git a/pyinfra/test/unit_tests/config_test.py b/pyinfra/test/unit_tests/config_test.py index ed0620b..5a5d610 100644 --- a/pyinfra/test/unit_tests/config_test.py +++ b/pyinfra/test/unit_tests/config_test.py @@ -1,9 +1,10 @@ +import os import tempfile import pytest import yaml -from pyinfra.config import Config +from pyinfra.config import Config, parse_disjunction_string @pytest.fixture @@ -36,3 +37,9 @@ def test_dot_access_key_does_not_exists(config): def test_access_key_does_not_exists(config): assert config["B"] is None + + +def test_parse_disjunction_string(): + assert parse_disjunction_string("A|Bb|c") == "c" + os.environ["Bb"] = "d" + assert parse_disjunction_string("A|Bb|c") == "d" diff --git a/pyinfra/visitor.py b/pyinfra/visitor.py index 0399789..e49a4cd 100644 --- a/pyinfra/visitor.py +++ b/pyinfra/visitor.py @@ -27,8 +27,10 @@ def get_object_descriptor(body): def get_response_object_descriptor(body): - return {"bucket_name": parse_disjunction_string(CONFIG.storage.bucket), - "object_name": get_response_object_name(body)} + return { + "bucket_name": parse_disjunction_string(CONFIG.storage.bucket), + "object_name": get_response_object_name(body), + } class ResponseStrategy(abc.ABC):