Ejemplo n.º 1
0
def test_set_new_merge_issue_241_4(tmpdir):
    data = {
        "name": "Bruno",
        "colors": ["red", "green"],
        "data": {
            "links": {
                "twitter": "rochacbruno",
                "site": "brunorocha.org"
            }
        },
    }
    toml_loader.write(str(tmpdir.join("settings.toml")), data, merge=False)

    data = {"data__links__telegram": "t.me/rochacbruno"}
    toml_loader.write(str(tmpdir.join("settings.local.toml")),
                      data,
                      merge=False)

    settings = LazySettings(settings_file="settings.toml")
    assert settings.NAME == "Bruno"
    assert settings.COLORS == ["red", "green"]
    assert settings.DATA.links == {
        "twitter": "rochacbruno",
        "site": "brunorocha.org",
        "telegram": "t.me/rochacbruno",
    }
Ejemplo n.º 2
0
def test_set_new_merge_issue_241_3(tmpdir):
    data = {
        "name": "Bruno",
        "colors": ["red", "green"],
        "data": {
            "links": {
                "twitter": "rochacbruno",
                "site": "brunorocha.org"
            }
        },
    }
    toml_loader.write(str(tmpdir.join("settings.toml")), data, merge=False)

    data = {
        "name": "Tommy Shelby",
        "colors": {
            "dynaconf_merge": ["yellow", "pink"]
        },
        "data": {
            "links": {
                "site": "pb.com"
            }
        },
    }
    toml_loader.write(str(tmpdir.join("settings.local.toml")),
                      data,
                      merge=False)

    settings = LazySettings(settings_file="settings.toml")
    assert settings.NAME == "Tommy Shelby"
    assert settings.COLORS == ["red", "green", "yellow", "pink"]
    assert settings.DATA.links == {"site": "pb.com"}
Ejemplo n.º 3
0
def test_set_new_merge_issue_241_2(tmpdir):
    data = {
        "default": {
            "name": "Bruno",
            "colors": ["red", "green"],
            "data": {
                "links": {"twitter": "rochacbruno", "site": "brunorocha.org"}
            },
        }
    }
    toml_loader.write(str(tmpdir.join("settings.toml")), data, merge=False)

    data = {
        "dynaconf_merge": True,
        "default": {
            "colors": ["blue"],
            "data": {"links": {"github": "rochacbruno.github.io"}},
        },
    }
    toml_loader.write(
        str(tmpdir.join("settings.local.toml")), data, merge=False
    )

    settings = LazySettings()
    assert settings.NAME == "Bruno"
    assert settings.COLORS == ["red", "green", "blue"]
    assert settings.DATA.links == {
        "twitter": "rochacbruno",
        "site": "brunorocha.org",
        "github": "rochacbruno.github.io",
    }
Ejemplo n.º 4
0
def test_config_aliases(tmpdir):
    data = {
        "hello": {"name": "Bruno", "passwd": 1234},
        "awesome": {"passwd": 5678},
    }
    toml_loader.write(str(tmpdir.join("blarg.toml")), data, merge=False)

    settings = LazySettings(
        ENVVAR_PREFIX="BRUCE",
        CORE_LOADERS=["TOML"],
        LOADERS=["dynaconf.loaders.env_loader"],
        DEFAULT_ENV="hello",
        ENV_SWITCHER="BRUCE_ENV",
        PRELOAD=[],
        SETTINGS_FILE=["blarg.toml"],
        INCLUDES=[],
        ENV="awesome",
    )

    assert settings.NAME == "Bruno"
    assert settings.PASSWD == 5678

    assert settings.ENVVAR_PREFIX_FOR_DYNACONF == "BRUCE"
    assert settings.CORE_LOADERS_FOR_DYNACONF == ["TOML"]
    assert settings.LOADERS_FOR_DYNACONF == ["dynaconf.loaders.env_loader"]
    assert len(settings._loaders) == 1
    assert settings.DEFAULT_ENV_FOR_DYNACONF == "hello"
    assert settings.ENV_SWITCHER_FOR_DYNACONF == "BRUCE_ENV"
    assert settings.PRELOAD_FOR_DYNACONF == []
    assert settings.SETTINGS_FILE_FOR_DYNACONF == ["blarg.toml"]
    assert settings.INCLUDES_FOR_DYNACONF == []
    assert settings.ENV_FOR_DYNACONF == "awesome"
    assert settings.current_env == "awesome"
Ejemplo n.º 5
0
def test_set_new_merge_issue_241_5(tmpdir):
    data = {
        "default": {
            "name": "Bruno",
            "colors": ["red", "green"],
            "data": {
                "links": {
                    "twitter": "rochacbruno",
                    "site": "brunorocha.org"
                }
            },
        }
    }
    toml_loader.write(str(tmpdir.join("settings.toml")), data, merge=False)

    data = {"default": {"colors": "@merge ['blue']"}}
    toml_loader.write(str(tmpdir.join("settings.local.toml")),
                      data,
                      merge=False)

    settings = LazySettings(environments=True, settings_file="settings.toml")
    assert settings.NAME == "Bruno"
    assert settings.COLORS == ["red", "green", "blue"]
    assert settings.DATA.links == {
        "twitter": "rochacbruno",
        "site": "brunorocha.org",
    }
Ejemplo n.º 6
0
def test_lowercase_read_mode(tmpdir):
    data = {
        "foo": "bar",
        "hello": "world",
        "default": 1,
        "databases": {
            "default": {
                "port": 8080
            }
        },
    }
    toml_loader.write(str(tmpdir.join("settings.toml")), data)

    settings = LazySettings(ENVLESS_MODE=True, lowercase_read=True)

    assert settings.FOO == "bar"
    assert settings.foo == "bar"
    assert settings.HELLO == "world"
    assert settings.hello == "world"
    assert settings.DEFAULT == 1
    assert settings.default == 1
    assert settings.DATABASES.default.port == 8080
    assert settings.databases.default.port == 8080

    assert "foo" in settings
    assert "FOO" in settings

    # test __dir__
    results = dir(settings)
    assert "foo" in results
    assert "FOO" in results

    results = dir(settings.databases)
    assert "default" in results
    assert "DEFAULT" in results
Ejemplo n.º 7
0
def test_lowercase_read_mode(tmpdir):
    """
    Starting on 3.0.0 lowercase keys are enabled by default
    """
    data = {
        "foo": "bar",
        "hello": "world",
        "default": 1,
        "databases": {"default": {"port": 8080}},
    }
    toml_loader.write(str(tmpdir.join("settings.toml")), data)

    # settings_files mispelled.. should be `settings_file`
    settings = LazySettings(settings_files="settings.toml")

    assert settings.FOO == "bar"
    assert settings.foo == "bar"
    assert settings.HELLO == "world"
    assert settings.hello == "world"
    assert settings.DEFAULT == 1
    assert settings.default == 1
    assert settings.DATABASES.default.port == 8080
    assert settings.databases.default.port == 8080

    assert "foo" in settings
    assert "FOO" in settings

    # test __dir__
    results = dir(settings)
    assert "foo" in results
    assert "FOO" in results

    results = dir(settings.databases)
    assert "default" in results
    assert "DEFAULT" in results
Ejemplo n.º 8
0
def test_config_aliases(tmpdir):
    data = {
        "hello": {"name": "Bruno", "passwd": 1234},
        "awesome": {"passwd": 5678},
    }
    toml_loader.write(str(tmpdir.join("blarg.toml")), data, merge=False)

    settings = LazySettings(
        envvar_prefix="BRUCE",
        core_loaders=["TOML"],
        loaders=["dynaconf.loaders.env_loader"],
        default_env="hello",
        env_switcher="BRUCE_ENV",
        prelaod=[],
        settings_file=["blarg.toml"],
        includes=[],
        ENV="awesome",
        environments=True,
    )

    assert settings.NAME == "Bruno"
    assert settings.PASSWD == 5678

    assert settings.ENVVAR_PREFIX_FOR_DYNACONF == "BRUCE"
    assert settings.CORE_LOADERS_FOR_DYNACONF == ["TOML"]
    assert settings.LOADERS_FOR_DYNACONF == ["dynaconf.loaders.env_loader"]
    assert len(settings._loaders) == 1
    assert settings.DEFAULT_ENV_FOR_DYNACONF == "hello"
    assert settings.ENV_SWITCHER_FOR_DYNACONF == "BRUCE_ENV"
    assert settings.PRELOAD_FOR_DYNACONF == []
    assert settings.SETTINGS_FILE_FOR_DYNACONF == ["blarg.toml"]
    assert settings.INCLUDES_FOR_DYNACONF == []
    assert settings.ENV_FOR_DYNACONF == "awesome"
    assert settings.current_env == "awesome"
Ejemplo n.º 9
0
def test_set_explicit_merge_token(tmpdir):
    data = {
        "default": {
            "a_list": [1, 2],
            "b_list": [1],
            "a_dict": {
                "name": "Bruno"
            },
        }
    }
    toml_loader.write(str(tmpdir.join("settings.toml")), data, merge=False)
    settings = LazySettings()
    assert settings.A_LIST == [1, 2]
    assert settings.B_LIST == [1]
    assert settings.A_DICT == {"name": "Bruno"}
    assert settings.A_DICT.name == "Bruno"

    settings.set("a_list", [3], merge=True)
    assert settings.A_LIST == [1, 2, 3]

    settings.set("b_list", "@merge [2]")
    assert settings.B_LIST == [1, 2]

    settings.set("b_list", "@merge [3, 4]")
    assert settings.B_LIST == [1, 2, 3, 4]

    settings.set("b_list", "@merge 5")
    assert settings.B_LIST == [1, 2, 3, 4, 5]

    settings.set("b_list", "@merge 6.6")
    assert settings.B_LIST == [1, 2, 3, 4, 5, 6.6]

    settings.set("b_list", "@merge false")
    assert settings.B_LIST == [1, 2, 3, 4, 5, 6.6, False]

    settings.set("b_list", "@merge foo,bar")
    assert settings.B_LIST == [1, 2, 3, 4, 5, 6.6, False, "foo", "bar"]

    settings.set("b_list", "@merge zaz")
    assert settings.B_LIST == [1, 2, 3, 4, 5, 6.6, False, "foo", "bar", "zaz"]

    settings.set("a_dict", "@merge {city='Guarulhos'}")
    assert settings.A_DICT.name == "Bruno"
    assert settings.A_DICT.city == "Guarulhos"

    settings.set("a_dict", "@merge country=Brasil")
    assert settings.A_DICT.name == "Bruno"
    assert settings.A_DICT.city == "Guarulhos"
    assert settings.A_DICT.country == "Brasil"

    settings.set("new_key", "@merge foo=bar")
    assert settings.NEW_KEY == {"foo": "bar"}
Ejemplo n.º 10
0
def test_envless_mode(tmpdir):
    data = {
        "foo": "bar",
        "hello": "world",
        "default": 1,
        "databases": {"default": {"port": 8080}},
    }
    toml_loader.write(str(tmpdir.join("settings.toml")), data)

    settings = LazySettings(
        settings_file="settings.toml"
    )  # already the default
    assert settings.FOO == "bar"
    assert settings.HELLO == "world"
    assert settings.DEFAULT == 1
    assert settings.DATABASES.default.port == 8080
Ejemplo n.º 11
0
def test_from_env_method_with_prefix(clean_env, tmpdir):
    data = {
        "default": {
            "prefix_a_default": "From default env"
        },
        "development": {
            "prefix_value": "From development env",
            "prefix_only_in_development": True,
        },
        "other": {
            "prefix_value": "From other env",
            "prefix_only_in_other": True,
            "not_prefixed": "no prefix",
        },
    }
    toml_path = str(tmpdir.join("base_settings.toml"))
    toml_loader.write(toml_path, data, merge=False)
    settings = LazySettings(
        settings_file=toml_path,
        environments=True,
        filter_strategy=PrefixFilter("prefix"),
    )
    settings.set("ARBITRARY_KEY", "arbitrary value")

    assert settings.VALUE == "From development env"
    assert settings.A_DEFAULT == "From default env"
    assert settings.ONLY_IN_DEVELOPMENT is True
    assert settings.ARBITRARY_KEY == "arbitrary value"
    assert settings.get("ONLY_IN_OTHER") is None

    # clone the settings object pointing to a new env
    other_settings = settings.from_env("other")
    assert other_settings.VALUE == "From other env"
    assert other_settings.A_DEFAULT == "From default env"
    assert other_settings.ONLY_IN_OTHER is True
    assert other_settings.get("ARBITRARY_KEY") is None
    assert other_settings.get("ONLY_IN_DEVELOPMENT") is None
    with pytest.raises(AttributeError):
        other_settings.not_prefixed
    with pytest.raises(AttributeError):
        # values set programatically are not cloned
        other_settings.ARBITRARY_KEY
    with pytest.raises(AttributeError):
        # values set only in a specific env not cloned
        other_settings.ONLY_IN_DEVELOPMENT
    # assert it is cached not created twice
    assert other_settings is settings.from_env("other")
Ejemplo n.º 12
0
def test_envless_mode_with_prefix(tmpdir):
    data = {
        "prefix_foo": "bar",
        "hello": "world",
        "prefix_default": 1,
        "prefix_databases": {"default": {"port": 8080}},
    }
    toml_loader.write(str(tmpdir.join("settings.toml")), data)

    settings = LazySettings(
        settings_file="settings.toml", filter_strategy=PrefixFilter("prefix")
    )  # already the default
    assert settings.FOO == "bar"
    with pytest.raises(AttributeError):
        settings.HELLO
    assert settings.DEFAULT == 1
    assert settings.DATABASES.default.port == 8080
Ejemplo n.º 13
0
def config(key: str, value: Optional[str] = None) -> None:
    """
    Manage thoth configuration options.
    """
    key = key.lower()

    if not settings.exists(key):
        console.print(f"The key {key} is invalid.")
    elif value is None:
        console.print(settings.get(key))
    else:
        if key == "default_channel" and value not in settings.channels:
            console.print(
                f"Invalid channel. Pick one from {settings.channels}")
        else:
            CONFIG_FILE.parent.mkdir(parents=True, exist_ok=True)

            toml_loader.write(CONFIG_FILE, {key: value}, merge=True)
Ejemplo n.º 14
0
def test_settings_dict_like_iteration(tmpdir):
    """Settings can be iterated just like a dict"""
    data = {
        "foo": "bar",
        "hello": "world",
        "default": 1,
        "databases": {"default": {"port": 8080}},
    }
    toml_loader.write(str(tmpdir.join("settings.toml")), data)

    # settings_files mispelled.. should be `settings_file`
    settings = LazySettings(settings_files="settings.toml")

    for key in settings:
        assert key in settings._store

    for key, value in settings.items():
        assert settings._store[key] == value
Ejemplo n.º 15
0
def test_preload(tmpdir):
    data = {
        "data": {"links": {"twitter": "rochacbruno", "site": "brunorocha.org"}}
    }
    toml_loader.write(str(tmpdir.join("preload.toml")), data, merge=False)

    data = {
        "dynaconf_merge": True,
        "data": {"links": {"github": "rochacbruno.github.io"}},
    }
    toml_loader.write(
        str(tmpdir.join("main_settings.toml")), data, merge=False
    )

    data = {
        "dynaconf_merge": True,
        "data": {"links": {"mastodon": "mastodon.social/@rochacbruno"}},
    }
    toml_loader.write(str(tmpdir.join("included.toml")), data, merge=False)

    settings = LazySettings(
        PRELOAD_FOR_DYNACONF=["preload.toml"],
        SETTINGS_FILE_FOR_DYNACONF="main_settings.toml",
        INCLUDES_FOR_DYNACONF=["included.toml"],
    )

    assert settings.DATA.links == {
        "twitter": "rochacbruno",
        "site": "brunorocha.org",
        "github": "rochacbruno.github.io",
        "mastodon": "mastodon.social/@rochacbruno",
    }
Ejemplo n.º 16
0
def test_from_env_method(clean_env, tmpdir):
    data = {
        "default": {
            "a_default": "From default env"
        },
        "development": {
            "value": "From development env",
            "only_in_development": True,
        },
        "other": {
            "value": "From other env",
            "only_in_other": True
        },
    }
    toml_path = str(tmpdir.join("base_settings.toml"))
    toml_loader.write(toml_path, data, merge=False)
    settings = LazySettings(settings_file=toml_path, environments=True)
    settings.set("ARBITRARY_KEY", "arbitrary value")

    assert settings.VALUE == "From development env"
    assert settings.A_DEFAULT == "From default env"
    assert settings.ONLY_IN_DEVELOPMENT is True
    assert settings.ARBITRARY_KEY == "arbitrary value"
    assert settings.get("ONLY_IN_OTHER") is None

    # clone the settings object pointing to a new env
    other_settings = settings.from_env("other")
    assert other_settings.VALUE == "From other env"
    assert other_settings.A_DEFAULT == "From default env"
    assert other_settings.ONLY_IN_OTHER is True
    assert other_settings.get("ARBITRARY_KEY") is None
    assert other_settings.get("ONLY_IN_DEVELOPMENT") is None
    with pytest.raises(AttributeError):
        # values set programatically are not cloned
        other_settings.ARBITRARY_KEY
    with pytest.raises(AttributeError):
        # values set only in a specific env not cloned
        other_settings.ONLY_IN_DEVELOPMENT
    # assert it is cached not created twice
    assert other_settings is settings.from_env("other")

    # Now the same using keep=True
    other_settings = settings.from_env("other", keep=True)
    assert other_settings.VALUE == "From other env"
    assert other_settings.A_DEFAULT == "From default env"
    assert other_settings.ONLY_IN_OTHER is True
    assert other_settings.ONLY_IN_DEVELOPMENT is True
    assert settings.ARBITRARY_KEY == "arbitrary value"

    # assert it is created not cached
    assert other_settings is not settings.from_env("other")

    # settings remains the same
    assert settings.VALUE == "From development env"
    assert settings.A_DEFAULT == "From default env"
    assert settings.ONLY_IN_DEVELOPMENT is True
    assert settings.ARBITRARY_KEY == "arbitrary value"
    assert settings.get("ONLY_IN_OTHER") is None

    # additional kwargs
    data = {
        "default": {
            "a_default": "From default env"
        },
        "production": {
            "value": "From prod env",
            "only_in_prod": True
        },
        "other": {
            "value": "From other env",
            "only_in_other": True
        },
    }
    toml_path = str(tmpdir.join("other_settings.toml"))
    toml_loader.write(toml_path, data, merge=False)

    new_other_settings = other_settings.from_env(
        "production", keep=True, SETTINGS_FILE_FOR_DYNACONF=toml_path)

    # production values
    assert new_other_settings.VALUE == "From prod env"
    assert new_other_settings.ONLY_IN_PROD is True
    # keep=True values
    assert new_other_settings.ONLY_IN_OTHER is True
    assert new_other_settings.ONLY_IN_DEVELOPMENT is True
    assert settings.A_DEFAULT == "From default env"
Ejemplo n.º 17
0
from __future__ import annotations

from dynaconf import settings
from dynaconf.loaders.toml_loader import write

# Get the potato
original = str(settings.POTATO)  # str() to force a copy
modern = "Modern Potato"
print("Original data:", original)
assert settings.POTATO == settings.get("potato") == original

# Change the Toml file
print("Change POTATO to `Modern Potato` in settings.toml file...")
write(settings.path_for("settings.toml"), {"default": {"potato": modern}})

# Print the original
print("Dynaconf knows:", settings.POTATO)
assert settings.POTATO == settings.get("potato") == original

# Get it freshly
print("Read it freshly to get changed value...")
print("Changed data:", settings.get_fresh("POTATO"))
assert settings.POTATO == settings.get_fresh("potato") == modern

# Get it again
print("Now read again without the get_fresh method")
print("Still the new value no?", settings.POTATO)
assert settings.POTATO == settings.get("potato") == modern

# Restore it
write(settings.path_for("settings.toml"), {"default": {"potato": original}})