def test_alternate_set_loader_prefix(): # type: ignore import sys path = os.path.join(os.path.dirname(__file__), "python_config.py") import tempfile with tempfile.TemporaryDirectory() as folder: create_path_from_config(folder, config_from_dict(PATH_DICT), remove_level=0) cfg = config( DICT2_1, # assumes dict ("dict", DICT2_2), ("env", ), ("python", path), ("json", JSON), ("ini", INI), ("dotenv", DOTENV), ("path", folder, 0), prefix="CONFIG", lowercase_keys=True, ) joined_dicts = dict((k, str(v)) for k, v in DICT1.items()) joined_dicts.update(DICT2_1) joined_dicts.update(DICT2_2) joined_dicts.update(DICT3) joined_dicts.update(DICT_INI) joined_dicts.update(DICT_DOTENV) joined_dicts.update((k, str(v)) for k, v in PATH_DICT.items()) joined_dicts["sys.version"] = sys.hexversion assert (config_from_dict(joined_dicts, lowercase_keys=True).as_dict() == cfg.as_dict()) assert config_from_dict(joined_dicts, lowercase_keys=True) == cfg
def test_alternate_set_loader_strings_python_module(): # type: ignore import sys module = "tests.python_config" import tempfile with tempfile.TemporaryDirectory() as folder, tempfile.NamedTemporaryFile( suffix=".json") as f1, tempfile.NamedTemporaryFile( suffix=".ini") as f2, tempfile.NamedTemporaryFile( suffix=".yaml") as f3, tempfile.NamedTemporaryFile( suffix=".toml") as f4: # path subfolder = folder + "/sub" os.makedirs(subfolder) create_path_from_config(subfolder, config_from_dict(PATH_DICT), remove_level=1) # json f1.file.write(JSON.encode()) f1.file.flush() # ini f2.file.write(INI.encode()) f2.file.flush() entries = [ DICT2_1, # dict DICT2_2, "env", module, # python f1.name, # json f2.name, # ini folder, # path ] if yaml: f3.file.write(YAML.encode()) f3.file.flush() entries.append(f3.name) if toml: f4.file.write(TOML.encode()) f4.file.flush() entries.append(f4.name) # toml cfg = config(*entries, prefix="CONFIG", lowercase_keys=True) joined_dicts = dict((k, str(v)) for k, v in DICT1.items()) joined_dicts.update(DICT2_1) joined_dicts.update(DICT2_2) joined_dicts.update(DICT3) joined_dicts.update(DICT_INI) if yaml: joined_dicts.update(DICT_YAML) if toml: joined_dicts.update(DICT_TOML) joined_dicts.update((k, str(v)) for k, v in PATH_DICT.items()) joined_dicts["sys.version"] = sys.hexversion assert (config_from_dict(joined_dicts, lowercase_keys=True).as_dict() == cfg.as_dict()) assert config_from_dict(joined_dicts, lowercase_keys=True) == cfg
def _config_from_temp_path(dic, remove_level=0, trailing_slash=False): # type: ignore import os with tempfile.TemporaryDirectory() as folder: lvl = remove_level subfolder = folder while lvl > 0: subfolder += "/sub" os.makedirs(subfolder) lvl -= 1 create_path_from_config(subfolder, config_from_dict(dic), remove_level=remove_level) if trailing_slash: folder += "/" cfg = config_from_path(folder, remove_level=remove_level) cfg2 = config_from_path(folder, remove_level=remove_level) walk = list(os.walk(folder)) # add an extra element to test reloads d = dic.copy() d["extra.value"] = 1 create_path_from_config(subfolder, config_from_dict(d), remove_level=remove_level) cfg2.reload() return cfg, folder, walk, cfg2
def test_alternate_set_loader_prefix(): # type: ignore import sys path = os.path.join(os.path.dirname(__file__), 'python_config.py') import tempfile with tempfile.TemporaryDirectory() as folder: create_path_from_config(folder, config_from_dict(PATH_DICT), remove_level=0) cfg = config( DICT2_1, # assumes dict ('dict', DICT2_2), ('env', ), ('python', path), ('json', JSON), ('ini', INI), ('path', folder, 0), prefix='CONFIG') joined_dicts = dict((k, str(v)) for k, v in DICT1.items()) joined_dicts.update(DICT2_1) joined_dicts.update(DICT2_2) joined_dicts.update(DICT3) joined_dicts.update(DICT_INI) joined_dicts.update((k, str(v)) for k, v in PATH_DICT.items()) joined_dicts['sys.version'] = sys.hexversion assert config_from_dict(joined_dicts).as_dict() == cfg.as_dict() assert config_from_dict(joined_dicts) == cfg
def test_alternate_set_loader_strings_python_module(): # type: ignore import sys module = 'tests.python_config' import tempfile with tempfile.TemporaryDirectory() as folder, \ tempfile.NamedTemporaryFile(suffix='.json') as f1, \ tempfile.NamedTemporaryFile(suffix='.ini') as f2, \ tempfile.NamedTemporaryFile(suffix='.yaml') as f3, \ tempfile.NamedTemporaryFile(suffix='.toml') as f4: # path subfolder = folder + '/sub' os.makedirs(subfolder) create_path_from_config(subfolder, config_from_dict(PATH_DICT), remove_level=1) # json f1.file.write(JSON.encode()) f1.file.flush() # ini f2.file.write(INI.encode()) f2.file.flush() entries = [ DICT2_1, # dict DICT2_2, 'env', module, # python f1.name, # json f2.name, # ini folder, # path ] if yaml: f3.file.write(YAML.encode()) f3.file.flush() entries.append(f3.name) if toml: f4.file.write(TOML.encode()) f4.file.flush() entries.append(f4.name # toml ) cfg = config(*entries, prefix='CONFIG') joined_dicts = dict((k, str(v)) for k, v in DICT1.items()) joined_dicts.update(DICT2_1) joined_dicts.update(DICT2_2) joined_dicts.update(DICT3) joined_dicts.update(DICT_INI) if yaml: joined_dicts.update(DICT_YAML) if toml: joined_dicts.update(DICT_TOML) joined_dicts.update((k, str(v)) for k, v in PATH_DICT.items()) joined_dicts['sys.version'] = sys.hexversion assert config_from_dict(joined_dicts).as_dict() == cfg.as_dict() assert config_from_dict(joined_dicts) == cfg
def _config_from_temp_path(dic, remove_level=0): # type: ignore import os with tempfile.TemporaryDirectory() as folder: lvl = remove_level subfolder = folder while lvl > 0: subfolder += '/sub' os.makedirs(subfolder) lvl -= 1 create_path_from_config(subfolder, config_from_dict(dic), remove_level=remove_level) cfg = config_from_path(folder, remove_level=remove_level) walk = list(os.walk(folder)) return cfg, folder, walk
def test_alternate_set_loader(): # type: ignore import sys path = os.path.join(os.path.dirname(__file__), "python_config.py") import tempfile with tempfile.TemporaryDirectory() as folder: create_path_from_config(folder, config_from_dict(PATH_DICT), remove_level=0) entries = [ DICT2_1, # assumes dict ("dict", DICT2_2), ("env", PREFIX), ("python", path, "CONFIG"), ("json", JSON), ("ini", INI), ("dotenv", DOTENV), ("path", folder, 0), ] if yaml: entries.append(("yaml", YAML)) if toml: entries.append(("toml", TOML)) cfg = config(*entries, lowercase_keys=True) joined_dicts = dict((k, str(v)) for k, v in DICT1.items()) joined_dicts.update(DICT2_1) joined_dicts.update(DICT2_2) joined_dicts.update(DICT3) joined_dicts.update(DICT_INI) joined_dicts.update(DICT_DOTENV) if yaml: joined_dicts.update(DICT_YAML) if toml: joined_dicts.update(DICT_TOML) joined_dicts.update((k, str(v)) for k, v in PATH_DICT.items()) joined_dicts["sys.version"] = sys.hexversion assert (config_from_dict(joined_dicts, lowercase_keys=True).as_dict() == cfg.as_dict()) assert config_from_dict(joined_dicts, lowercase_keys=True) == cfg
def test_separator_override_default(): # type: ignore import sys import tempfile path = os.path.join(os.path.dirname(__file__), "python_config.py") with tempfile.TemporaryDirectory() as folder: create_path_from_config(folder, config_from_dict(PATH_DICT), remove_level=0) entries = [ ("env", PREFIX, "__"), ("python", path, "CONFIG"), ] cfg = config(*entries, separator="_", lowercase_keys=True) joined_dicts = dict((k, str(v)) for k, v in DICT1.items()) joined_dicts.update(DICT2_1) joined_dicts.update(DICT2_2) joined_dicts["sys.version"] = sys.hexversion assert ( config_from_dict(joined_dicts, lowercase_keys=True).as_dict() == cfg.as_dict() ) assert config_from_dict(joined_dicts, lowercase_keys=True) == cfg
def test_alternate_set_loader(): # type: ignore import sys path = os.path.join(os.path.dirname(__file__), 'python_config.py') import tempfile with tempfile.TemporaryDirectory() as folder: create_path_from_config(folder, config_from_dict(PATH_DICT), remove_level=0) entries = [ DICT2_1, # assumes dict ('dict', DICT2_2), ('env', PREFIX), ('python', path, 'CONFIG'), ('json', JSON), ('ini', INI), ('path', folder, 0), ] if yaml: entries.append(('yaml', YAML)) if toml: entries.append(('toml', TOML)) cfg = config(*entries) joined_dicts = dict((k, str(v)) for k, v in DICT1.items()) joined_dicts.update(DICT2_1) joined_dicts.update(DICT2_2) joined_dicts.update(DICT3) joined_dicts.update(DICT_INI) if yaml: joined_dicts.update(DICT_YAML) if toml: joined_dicts.update(DICT_TOML) joined_dicts.update((k, str(v)) for k, v in PATH_DICT.items()) joined_dicts['sys.version'] = sys.hexversion assert config_from_dict(joined_dicts).as_dict() == cfg.as_dict() assert config_from_dict(joined_dicts) == cfg
def test_reload(): # type: ignore import sys path = str(os.path.join(os.path.dirname(__file__), "python_config.py")) import tempfile with tempfile.TemporaryDirectory() as folder, tempfile.NamedTemporaryFile( suffix=".json") as f1, tempfile.NamedTemporaryFile( suffix=".ini") as f2, tempfile.NamedTemporaryFile( suffix=".yaml") as f3, tempfile.NamedTemporaryFile( suffix=".toml") as f4, tempfile.NamedTemporaryFile( suffix=".env") as f5: # path subfolder = folder + "/sub" os.makedirs(subfolder) create_path_from_config(subfolder, config_from_dict(PATH_DICT), remove_level=1) # json f1.file.write(JSON.encode()) f1.file.flush() # ini f2.file.write(INI.encode()) f2.file.flush() # ini f5.file.write(DOTENV.encode()) f5.file.flush() entries = [ DICT2_1, # dict DICT2_2, "env", path, # python f1.name, # json f2.name, # ini f5.name, # .env folder, # path ] if yaml: f3.file.write(YAML.encode()) f3.file.flush() entries.append(f3.name) # yaml if toml: f4.file.write(TOML.encode()) f4.file.flush() entries.append(f4.name) # toml cfg = config(*entries, prefix="CONFIG", lowercase_keys=True) joined_dicts = dict((k, str(v)) for k, v in DICT1.items()) joined_dicts.update(DICT2_1) joined_dicts.update(DICT2_2) joined_dicts.update(DICT3) joined_dicts.update(DICT_INI) joined_dicts.update(DICT_DOTENV) if yaml: joined_dicts.update(DICT_YAML) if toml: joined_dicts.update(DICT_TOML) joined_dicts.update((k, str(v)) for k, v in PATH_DICT.items()) joined_dicts["sys.version"] = sys.hexversion assert (config_from_dict( joined_dicts, lowercase_keys=True).as_dict() == cfg.as_dict()) assert config_from_dict(joined_dicts, lowercase_keys=True) == cfg # json f1.file.seek(0) f1.file.truncate(0) f1.file.write(JSON2.encode()) f1.file.flush() cfg.reload() assert cfg["a3.b1.c1"] == "afsdf"