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")
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"
def test_set_explicit_merge_token(tmpdir): data = { "a_list": [1, 2], "b_list": [1], "a_dict": { "name": "Bruno" }, } toml_loader.write(str(tmpdir.join("settings.toml")), data, merge=False) settings = LazySettings(settings_file="settings.toml") 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"}
import os from dynaconf import LazySettings settings = LazySettings(DEBUG_LEVEL_FOR_DYNACONF=os.getenv( 'OAUTHCLIENT_DEBUG_LEVEL', 'DEBUG'), ENV_FOR_DYNACONF=os.getenv('OAUTHCLIENT_ENV', 'development'), ENVVAR_PREFIX_FOR_DYNACONF='OAUTHCLIENT') settings.set( 'ROOT_DIR', os.path.dirname( os.path.abspath(os.path.join(os.path.abspath(__file__), "../")))) settings.load_file(os.path.join(settings.ROOT_DIR, 'config/default.py'), env='default') settings.load_file(os.path.join(settings.ROOT_DIR, 'settings.py'))