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
示例#3
0
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
示例#8
0
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"