Пример #1
0
def test_substitute_env_var_in_config_variable_file(monkeypatch):
    monkeypatch.setenv("FOO", "val_of_arg_0")
    config_variables_dict = {
        "arg0": "${FOO}",
        "arg2": {
            "v1": 2
        },
        "replace_me": "wrong"
    }
    assert (substitute_config_variable(
        "abc${arg0}", config_variables_dict) == "abcval_of_arg_0")
    monkeypatch.delenv("FOO")
    with pytest.raises(MissingConfigVariableError):
        substitute_config_variable("abc${arg0}", config_variables_dict)

    with open(
            file_relative_path(
                __file__,
                "../test_fixtures/great_expectations_basic_with_variables.yml",
            )) as f:
        config = yaml.load(f)

    monkeypatch.setenv("replace_me", "correct")

    # this is how dict is created in data_context.get_config_with_variables_substituted, for env var override
    config_variables_dict = {
        **config_variables_dict,
        **dict(os.environ),
    }

    config = substitute_all_config_variables(config, config_variables_dict)

    assert (
        config["datasources"]["mydatasource"]["batch_kwargs_generators"]
        ["mygenerator"]["reader_options"]["test_variable_sub1"] == "correct")
def test_substitute_config_variable():
    config_variables_dict = {"arg0": "val_of_arg_0", "arg2": {"v1": 2}}
    assert (
        substitute_config_variable("abc${arg0}", config_variables_dict)
        == "abcval_of_arg_0"
    )
    assert (
        substitute_config_variable("abc$arg0", config_variables_dict)
        == "abcval_of_arg_0"
    )
    assert (
        substitute_config_variable("${arg0}", config_variables_dict) == "val_of_arg_0"
    )
    assert substitute_config_variable("hhhhhhh", config_variables_dict) == "hhhhhhh"
    with pytest.raises(MissingConfigVariableError) as exc:
        substitute_config_variable(
            "abc${arg1} def${foo}", config_variables_dict
        )  # does NOT equal "abc${arg1}"
    assert (
        """Unable to find a match for config substitution variable: `arg1`.
Please add this missing variable to your `uncommitted/config_variables.yml` file or your environment variables.
See https://great-expectations.readthedocs.io/en/latest/reference/data_context_reference.html#managing-environment-and-secrets"""
        in exc.value.message
    )
    assert (
        substitute_config_variable("${arg2}", config_variables_dict)
        == config_variables_dict["arg2"]
    )
    assert exc.value.missing_config_variable == "arg1"
def test_substitute_config_variable():
    config_variables_dict = {
        "arg0": "val_of_arg_0",
        "arg2": {
            "v1": 2
        }
    }
    assert substitute_config_variable("abc${arg0}", config_variables_dict) == "abcval_of_arg_0"
    assert substitute_config_variable("abc$arg0", config_variables_dict) == "abcval_of_arg_0"
    assert substitute_config_variable("${arg0}", config_variables_dict) == "val_of_arg_0"
    assert substitute_config_variable("hhhhhhh", config_variables_dict) == "hhhhhhh"
    with pytest.raises(InvalidConfigError) as exc:
        substitute_config_variable("abc${arg1}", config_variables_dict)  # does NOT equal "abc${arg1}"
    assert exc.value.message.startswith("Unable to find match for config variable arg1")
    assert substitute_config_variable("${arg2}", config_variables_dict) == config_variables_dict["arg2"]
def test_substitute_config_variable():
    config_variables_dict = {
        "arg0": "val_of_arg_0",
        "arg2": {
            "v1": 2
        }
    }
    assert substitute_config_variable("abc${arg0}", config_variables_dict) == "abcval_of_arg_0"
    assert substitute_config_variable("abc$arg0", config_variables_dict) == "abcval_of_arg_0"
    assert substitute_config_variable("${arg0}", config_variables_dict) == "val_of_arg_0"
    assert substitute_config_variable("hhhhhhh", config_variables_dict) == "hhhhhhh"
    assert substitute_config_variable("abc${arg1}", config_variables_dict) == "abc${arg1}"
    assert substitute_config_variable("${arg2}", config_variables_dict) == config_variables_dict["arg2"]
def test_substitute_config_variable():
    config_variables_dict = {
        "arg0": "val_of_arg_0",
        "arg2": {
            "v1": 2
        },
        "aRg3": "val_of_aRg_3",
        "ARG4": "val_of_ARG_4",
    }
    assert (substitute_config_variable(
        "abc${arg0}", config_variables_dict) == "abcval_of_arg_0")
    assert (substitute_config_variable(
        "abc$arg0", config_variables_dict) == "abcval_of_arg_0")
    assert (substitute_config_variable(
        "${arg0}", config_variables_dict) == "val_of_arg_0")
    assert substitute_config_variable("hhhhhhh",
                                      config_variables_dict) == "hhhhhhh"
    with pytest.raises(MissingConfigVariableError) as exc:
        substitute_config_variable(
            "abc${arg1} def${foo}",
            config_variables_dict)  # does NOT equal "abc${arg1}"
    assert ("""Unable to find a match for config substitution variable: `arg1`.
Please add this missing variable to your `uncommitted/config_variables.yml` file or your environment variables.
See https://great-expectations.readthedocs.io/en/latest/reference/data_context_reference.html#managing-environment-and-secrets"""
            in exc.value.message)
    assert (substitute_config_variable(
        "${arg2}", config_variables_dict) == config_variables_dict["arg2"])
    assert exc.value.missing_config_variable == "arg1"

    # Null cases
    assert substitute_config_variable("", config_variables_dict) == ""
    assert substitute_config_variable(None, config_variables_dict) == None

    # Test with mixed case
    assert (substitute_config_variable(
        "prefix_${aRg3}_suffix",
        config_variables_dict) == "prefix_val_of_aRg_3_suffix")
    assert (substitute_config_variable(
        "${aRg3}", config_variables_dict) == "val_of_aRg_3")
    # Test with upper case
    assert (substitute_config_variable(
        "prefix_$ARG4/suffix",
        config_variables_dict) == "prefix_val_of_ARG_4/suffix")
    assert substitute_config_variable("$ARG4",
                                      config_variables_dict) == "val_of_ARG_4"

    # Test with multiple substitutions
    assert (substitute_config_variable(
        "prefix${arg0}$aRg3",
        config_variables_dict) == "prefixval_of_arg_0val_of_aRg_3")

    # Escaped `$` (don't substitute, but return un-escaped string)
    assert (substitute_config_variable(
        r"abc\${arg0}\$aRg3", config_variables_dict) == "abc${arg0}$aRg3")

    # Multiple configurations together
    assert (
        substitute_config_variable(
            r"prefix$ARG4.$arg0/$aRg3:${ARG4}/\$dontsub${arg0}:${aRg3}.suffix",
            config_variables_dict,
        ) ==
        "prefixval_of_ARG_4.val_of_arg_0/val_of_aRg_3:val_of_ARG_4/$dontsubval_of_arg_0:val_of_aRg_3.suffix"
    )