Exemple #1
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
Exemple #2
0
def test_local_files(tmpdir):

    settings_file_yaml = """
    default:
      name: Bruno
      colors:
        - green
        - blue
      data:
        link: brunorocha.org
      other:
        foo: bar
      music:
        current:
          volume: 10
          title: The Beatles - Strawberry Fields
    """
    tmpdir.join("settings.yaml").write(settings_file_yaml)

    local_file_yaml = """
    default:
      name: Bruno Rocha
      colors:
        - red
        - dynaconf_merge
      data:
        city: Guarulhos
        dynaconf_merge: true
      other:
        baz: zaz
      music__current__volume: 100
      music__current__title: Led Zeppelin - Immigrant Song
    """
    tmpdir.join("settings.local.yaml").write(local_file_yaml)

    conf = LazySettings()
    assert conf.NAME == "Bruno Rocha"
    assert set(conf.COLORS) == set(["red", "green", "blue"])
    assert conf.DATA.link == "brunorocha.org"
    assert conf.DATA.city == "Guarulhos"
    assert conf.OTHER == {"baz": "zaz"}
    assert conf.MUSIC.current.volume == 100
    assert conf.MUSIC.current.title == "Led Zeppelin - Immigrant Song"
Exemple #3
0
def test_ignoring_duplicate_validators(tmpdir):
    tmpfile = tmpdir.join("settings.toml")
    tmpfile.write(TOML)

    settings = LazySettings(
        ENV_FOR_DYNACONF="EXAMPLE",
        SETTINGS_FILE_FOR_DYNACONF=str(tmpfile),
        silent=True,
    )

    validator1 = Validator("VERSION", "AGE", "NAME", must_exist=True)
    settings.validators.register(
        validator1, Validator("VERSION", "AGE", "NAME", must_exist=True))

    assert len(settings.validators) == 1

    settings.validators.register(validator1)

    assert len(settings.validators) == 1
Exemple #4
0
def test_clone_with_module_type():
    # create a settings object
    settings = LazySettings(FOO="bar", A_MODULE=os)
    # adding a module type makes object unpickaable
    # then .clone raised an error, this was fixed by copying the dict.
    assert settings.FOO == "bar"

    # clone it
    cloned = settings.dynaconf.clone()
    assert cloned.FOO == "bar"

    # modify the cloned settings
    cloned.FOO = "baz"
    assert cloned.FOO == "baz"

    # assert original settings is not modified
    assert settings.FOO == "bar"

    assert settings.A_MODULE == cloned.A_MODULE
Exemple #5
0
def test_validators_on_init(tmpdir):
    TOML = """
    [default]
    hostname = 'devserver.com'
    username = '******'
    """
    tmpfile = tmpdir.join("settings.toml")
    tmpfile.write(TOML)

    settings = LazySettings(
        environments=True,
        settings_file=str(tmpfile),
        validators=(
            Validator("hostname", eq="devserver.com"),
            Validator("username", ne="admin"),
        ),
    )

    with pytest.raises(ValidationError):
        settings.HOSTNAME
Exemple #6
0
def test_validator_descriptions_flat(tmpdir):
    validators = ValidatorList(
        LazySettings(),
        validators=[
            Validator("foo", description="foo"),
            Validator("bar", description="bar"),
            Validator("baz", "zaz", description="baz zaz"),
            Validator("foo", description="another message"),
            Validator("a", description="a") & Validator("b"),
        ],
    )

    assert validators.descriptions(flat=True) == {
        "bar": "bar",
        "baz": "baz zaz",
        "zaz": "baz zaz",
        "foo": "foo",
        "a": "a",
        "b": "a",
    }
Exemple #7
0
def test_validator_can_provide_default(tmpdir):
    tmpfile = tmpdir.join("settings.toml")
    TOML = """
    name = 'Bruno'
    colors = ['red', 'green', 'blue']
    """
    tmpfile.write(TOML)
    settings = LazySettings(
        settings_file=str(tmpfile),
        validators=[
            Validator("name", required=True),
            Validator("FOO", default="BAR"),
            Validator("COMPUTED", default=lambda st, va: "I am computed"),
        ],
    )
    assert settings.name == "Bruno"
    assert settings.colors == ["red", "green", "blue"]

    assert settings.FOO == "BAR"
    assert settings.COMPUTED == "I am computed"
Exemple #8
0
def test_validator_custom_message(tmpdir):
    """Assert custom message is being processed by validator."""
    tmpfile = tmpdir.join("settings.toml")
    tmpfile.write(TOML)

    settings = LazySettings(SETTINGS_FILE_FOR_DYNACONF=str(tmpfile),
                            silent=True)

    custom_msg = "You cannot set {name} to {value} in env {env}"
    settings.validators.register(
        Validator("MYSQL_HOST", eq="development.com", env="DEVELOPMENT"),
        Validator("MYSQL_HOST", ne="development.com", env="PRODUCTION"),
        Validator("VERSION", ne=1, messages={"operations": custom_msg}),
    )

    with pytest.raises(ValidationError) as error:
        settings.validators.validate()

    assert custom_msg.format(name="VERSION", value="1",
                             env="DEVELOPMENT") in str(error)
Exemple #9
0
def load_config_at_path(path):
    """Load config at exact path

    Args:
        path (path-like): path to config file

    Returns:
        dict: config dict
    """
    if path.exists() and path.is_file():
        options = DYNACONF_OPTIONS.copy()
        options.update({
            'ROOT_PATH_FOR_DYNACONF': safepath(path.parent),
            'SETTINGS_FILE_FOR_DYNACONF': safepath(path.name),
        })
        return LazySettings(**options)
    else:
        raise ConfigurationError(
            'Couldn\'t find ballet.yml config file at {path!s}'
            .format(path=path))
Exemple #10
0
def test_set_new_merge_issue_241_1(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)
    settings = LazySettings(environments=True, settings_file="settings.toml")
    assert settings.NAME == "Bruno"
    assert settings.COLORS == ["red", "green"]
    assert settings.DATA.links == {
        "twitter": "rochacbruno",
        "site": "brunorocha.org",
    }
Exemple #11
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
Exemple #12
0
def test_no_reload_on_single_env(tmpdir, mocker):
    tmpfile = tmpdir.join("settings.toml")
    tmpfile.write(TOML)

    same_env_validator = Validator("VERSION",
                                   is_type_of=int,
                                   env="development")
    other_env_validator = Validator("NAME", must_exist=True, env="production")

    settings = LazySettings(ENV_FOR_DYNACONF="DEVELOPMENt",
                            SETTINGS_FILE_FOR_DYNACONF=str(tmpfile))
    using_env = mocker.patch.object(settings, "from_env")

    settings.validators.register(same_env_validator)
    settings.validators.validate()
    using_env.assert_not_called()

    settings.validators.register(other_env_validator)
    settings.validators.validate()
    using_env.assert_any_call("production")
    assert using_env.call_count == 1
Exemple #13
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
Exemple #14
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"
Exemple #15
0
def test_cast_before_validate(tmpdir):
    tmpfile = tmpdir.join("settings.toml")
    TOML = """
    name = 'Bruno'
    colors = ['red', 'green', 'blue']
    """
    tmpfile.write(TOML)
    settings = LazySettings(
        settings_file=str(tmpfile),
        silent=True,
        lowercase_read=True,
        validators=[
            Validator("name", len_eq=5),
            Validator("name", len_min=1),
            Validator("name", len_max=5),
            Validator("colors", len_eq=3),
            Validator("colors", len_eq=3),
            Validator("colors", len_eq=24, cast=str),
        ],
    )
    assert settings.name == "Bruno"
    assert settings.colors == ["red", "green", "blue"]
Exemple #16
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
Exemple #17
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"
Exemple #18
0
def test_preload(tmpdir):
    data = {
        "default": {
            "data": {
                "links": {"twitter": "rochacbruno", "site": "brunorocha.org"}
            }
        }
    }
    toml_loader.write(str(tmpdir.join("preload.toml")), data, merge=False)

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

    data = {
        "dynaconf_merge": True,
        "default": {
            "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",
    }
Exemple #19
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",
    }
Exemple #20
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",
    }
Exemple #21
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"}
Exemple #22
0
def test_should_not_duplicate_with_global_merge(tmpdir):
    """Assert merge unique in a first level. Issue #653"""
    settings_file_yaml = """
    default:
      SOME_KEY: "value"
      SOME_LIST:
        - "item_1"
        - "item_2"
        - "item_3"
    other:
      SOME_KEY: "new_value"
      SOME_LIST:
        - "item_4"
        - "item_5"
    even_other:
      SOME_KEY: "new_value_2"
      SOME_LIST:
        - "item_6"
        - "item_7"
    """
    tmpdir.join("settings.yaml").write(settings_file_yaml)
    settings = LazySettings(environments=True,
                            settings_files=["settings.yaml"],
                            merge_enabled=True)
    # settings.reload()
    assert settings.SOME_KEY == "value"
    assert settings.SOME_LIST == ["item_1", "item_2", "item_3"]

    other_settings = settings.from_env("other")
    assert other_settings.SOME_KEY == "new_value"
    assert other_settings.SOME_LIST == [
        "item_1",
        "item_2",
        "item_3",
        "item_4",
        "item_5",
    ]
Exemple #23
0
from dynaconf import LazySettings, Validator

from uptimer import ROOT_PATH

settings = LazySettings(
    DEBUG_LEVEL_FOR_DYNACONF="DEBUG",
    CORE_LOADERS_FOR_DYNACONF=["TOML", "ENV"],
    ENV_SWITCHER_FOR_DYNACONF="UPTIMER_ENV",
    ENVVAR_PREFIX_FOR_DYNACONF=False,
    LOADERS_FOR_DYNACONF=["dynaconf.loaders.env_loader"],
    ROOT_PATH_FOR_DYNACONF=ROOT_PATH,
    SETTINGS_FILE_FOR_DYNACONF="settings.toml,.secrets.toml",
)

settings.validators.register(
    # Ensure writer plugin exists
    Validator("WRITER_PLUGIN", must_exist=True),
    # Ensure reader plugin exists, but only when queue plugin does not
    Validator("READER_PLUGIN",
              must_exist=True,
              when=Validator("QUEUE_PLUGIN", eq="")),
)
settings.validators.validate()
Exemple #24
0
from dynaconf import LazySettings

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

assert settings.server == "foo.com"
assert settings.SERVER == "foo.com"
assert settings["SERVER"] == "foo.com"
assert settings["server"] == "foo.com"
assert settings("SERVER") == "foo.com"
assert settings("server") == "foo.com"
assert settings.get("SERVER") == "foo.com"
assert settings.get("server") == "foo.com"
Exemple #25
0
import sys
import json

from typing import Dict
from dynaconf import LazySettings

from opa.core.logger import log

config = LazySettings()

from opa.core.plugin import (
    HookDefinition,
    Hook,
    Driver,
    Setup,
    get_plugin_manager,
    get_util,
    get_component,
    get_instance,
    get_router,
    call_hook,
    call_hook_async,
)


def init_configuration():
    config.configure(
        ENV_SWITCHER_FOR_DYNACONF='ENV',
        ENVVAR_PREFIX_FOR_DYNACONF='OPA',
        ROOT_PATH_FOR_DYNACONF='/data/settings',
        ENVIRONMENTS_FOR_DYNACONF=True,
Exemple #26
0
def test_post_load_hooks(clean_env, tmpdir):
    """Test post load hooks works

    This test uses 3 settings files

    PRELOAD = "plugin_folder/plugin.py"
    SETTINGS_FILE = "settings.py"
    HOOKFILES = ["plugin_folder/dynaconf_hooks.py", "dynaconf_hooks.py"]

    The hook file has a function called "post" which is called after
    loading the settings, that function accepts the argument `settings`
    which is a copy of the settings object, and returns a dictionary
    of settings to be merged.
    """

    # Arrange
    plugin_folder = tmpdir.mkdir("plugin_folder")
    plugin_folder.join("__init__.py").write('print("initing plugin...")')

    plugin_path = plugin_folder.join("plugin.py")
    plugin_hook = plugin_folder.join("dynaconf_hooks.py")
    settings_path = tmpdir.join("settings.py")
    settings_hook = tmpdir.join("dynaconf_hooks.py")

    to_write = {
        str(plugin_path): ["PLUGIN_NAME = 'DummyPlugin'"],
        str(settings_path): [
            "INSTALLED_APPS = ['admin']",
            "COLORS = ['red', 'green']",
            "DATABASES = {'default': {'NAME': 'db'}}",
            "BANDS = ['Rush', 'Yes']",
        ],
        str(plugin_hook): [
            "post = lambda settings: "
            "{"
            "'PLUGIN_NAME': settings.PLUGIN_NAME.lower(),"
            "'COLORS': '@merge blue',"
            "'DATABASES__default': '@merge PORT=5151',"
            "'DATABASES__default__VERSION': 42,"
            "'DATABASES__default__FORCED_INT': '@int 12',",
            "'BANDS': ['Anathema', 'dynaconf_merge']"
            "}",
        ],
        str(settings_hook): [
            "post = lambda settings: "
            "{"
            "'INSTALLED_APPS': [settings.PLUGIN_NAME],"
            "'dynaconf_merge': True,"
            "}"
        ],
    }

    for path, lines in to_write.items():
        with open(str(path),
                  "w",
                  encoding=default_settings.ENCODING_FOR_DYNACONF) as f:
            for line in lines:
                f.write(line)
                f.write("\n")

    # Act
    settings = LazySettings(preload=["plugin_folder.plugin"],
                            settings_file="settings.py")

    # Assert
    assert settings.PLUGIN_NAME == "dummyplugin"
    assert settings.INSTALLED_APPS == ["admin", "dummyplugin"]
    assert settings.COLORS == ["red", "green", "blue"]
    assert settings.DATABASES.default.NAME == "db"
    assert settings.DATABASES.default.PORT == 5151
    assert settings.DATABASES.default.VERSION == 42
    assert settings.DATABASES.default.FORCED_INT == 12
    assert settings.BANDS == ["Rush", "Yes", "Anathema"]
    assert settings._loaded_hooks[str(plugin_hook)] == {
        "post": {
            "PLUGIN_NAME": "dummyplugin",
            "COLORS": "@merge blue",
            "DATABASES__default": "@merge PORT=5151",
            "DATABASES__default__VERSION": 42,
            "DATABASES__default__FORCED_INT": "@int 12",
            "BANDS": ["Anathema", "dynaconf_merge"],
        }
    }
    assert settings._loaded_hooks[str(settings_hook)] == {
        "post": {
            "INSTALLED_APPS": ["dummyplugin"],
        }
    }
Exemple #27
0
# -*- coding: utf-8 -*-
import multiprocessing
import os
from dynaconf import LazySettings
from common.utils import _ConfigParser
from common import constants

basedir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
settings = LazySettings(ROOT_PATH_FOR_DYNACONF=constants.BASE_DIR)


class BaseConfig:
    """
    生产配置
    """
    DEBUG = False

    _LOCALES = ['en_US', 'zh_Hans_CN']
    BABEL_DEFAULT_LOCALE = _LOCALES[0]
    SECRET_KEY = os.getenv('SECRET_KEY', 'a secret string')

    # 数据库配置
    DATABASE_HOST = settings.get('HOST', '127.0.0.1')
    DATABASE_PORT = settings.get('PORT', 3306)
    DATABASE_USER = settings.get('USER', 'root')
    DATABASE_PASSWORD = settings.get('PASSWORD', '123qwe,.')
    DATABASE_NAME = settings.get('NAME', 'yzy_kvm_db')
    # DATABASE_HOST = '127.0.0.1'
    # DATABASE_PORT = 3306
    # DATABASE_USER = '******'
    # DATABASE_PASSWORD = '******'
Exemple #28
0
def test_validators(tmpdir):

    tmpfile = tmpdir.join("settings.toml")
    tmpfile.write(TOML)

    settings = LazySettings(
        ENV_FOR_DYNACONF="EXAMPLE",
        SETTINGS_FILE_FOR_DYNACONF=str(tmpfile),
        silent=True,
    )

    settings.validators.register(
        Validator("VERSION", "AGE", "NAME", must_exist=True),
        Validator("AGE", lte=30, gte=10),
        Validator("PROJECT", eq="hello_world"),
        Validator("PRESIDENT", env="DEVELOPMENT", ne="Trump"),
        Validator("SALARY", lt=1000000, gt=1000),
        Validator("DEV_SERVERS", must_exist=True, is_type_of=(list, tuple)),
        Validator("MYSQL_HOST", env="DEVELOPMENT", is_in=settings.DEV_SERVERS),
        Validator("MYSQL_HOST",
                  env="PRODUCTION",
                  is_not_in=settings.DEV_SERVERS),
        Validator("NAME", condition=lambda x: x in ("BRUNO", "MIKE")),
        Validator(
            "IMAGE_1",
            "IMAGE_2",
            env="development",
            must_exist=True,
            when=Validator("BASE_IMAGE",
                           must_exist=True,
                           env=settings.ENV_FOR_DYNACONF),
        ),
        Validator(
            "IMAGE_4",
            "IMAGE_5",
            env=("development", "production"),
            must_exist=True,
            when=Validator("BASE_IMAGE",
                           must_exist=False,
                           env=settings.ENV_FOR_DYNACONF),
        ),
        Validator(
            "PORT",
            must_exist=True,
            ne=8000,
            when=Validator("MYSQL_HOST", eq="localhost"),
        ),
        #
        Validator("ZERO", is_type_of=int, eq=0),
        Validator("FALSE", is_type_of=bool, eq=False),
    )

    assert settings.validators.validate() is None

    settings.validators.register(
        Validator("TESTVALUEZZ", env="development"),
        Validator("TESTVALUE", eq="hello_world"),
    )

    with pytest.raises(ValidationError):
        settings.validators.validate()

    with pytest.raises(TypeError):
        Validator("A", condition=1)

    with pytest.raises(TypeError):
        Validator("A", when=1)
Exemple #29
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"
Exemple #30
0
from pathlib import Path

from dynaconf import LazySettings

# Tell dynaconf to search in folder of this conf.py file first
config = LazySettings(ROOT_PATH_FOR_DYNACONF=Path(__file__).parent,
                      CORE_LOADERS_FOR_DYNACONF=('TOML', ),
                      SETTINGS_FILE_FOR_DYNACONF=('settings.toml',
                                                  '.secrets.toml'))

config.DATABASES = {
    'default': {
        'engine': 'tortoise.backends.asyncpg',
        'credentials': {
            'host': None,
            'port': 0,
            'user': None,
            'password': None,
            'database': config.DB_NAME,
        }
    },
}