Пример #1
0
def non_dev_check(_config: Dynaconf):
    requireds = (
        'SMTP.SERVER',
        'SMTP.NOREPLY',
        'SMTP.NOREPLY_PASSWORD',
    )
    for req in requireds:
        if _config.get(req) is None:
            raise ValidationError(
                f'{req} are required in env {_config["ENV"]}')
    if _config['JWT']['SECRET'] == DEFAULT_SECRET:
        raise ValidationError(f'Use default secret in env {_config["ENV"]}')
    _config['DEBUG'] = False
    _config['TESTING'] = False
Пример #2
0
def __merge_secrets(config: Union[Dynaconf, DynaBox], src_config: Dynaconf = None):
    if src_config is None:
        src_config = config
    for key, val in config.items():
        if isinstance(val, dict):
            __merge_secrets(val, src_config)
            continue
        # NOTE value must be an exact match to avoid interfering
        # with other templates
        if isinstance(val, str) and (val[0:2] == "${" and val[-1] == "}"):
            ref_key = val[2:-1]
            ref_val = src_config.get(ref_key, None)
            if ref_val is not None:
                config[key] = ref_val
            continue
Пример #3
0
def load_configuration(env: Optional[APP_ENV] = None) -> Configuration:
    if not env:
        env = cast(APP_ENV, os.getenv("ENV_FOR_DYNACONF", "development"))

    settings = Dynaconf(
        settings_files=["default.yaml", f"{env}.yaml", ".secrets.yaml"],
        load_dotenv=True,
        merge_enabled=True,
        root_path=str(PROJECT_ROOT / "config"),
        envvar_prefix="FASTAPI_BACKEND",
    )

    config_dict = {"environment": env}
    for key in Configuration.__fields__.keys():
        if settings.get(key) is not None:
            config_dict[key] = settings[key]

    config = Configuration(**config_dict)

    return config
Пример #4
0
from __future__ import annotations

from dynaconf import Dynaconf

settings = Dynaconf(
    settings_file="settings.yaml",
    environments=True,
)

print(settings.current_env)
print(settings._loaded_by_loaders)

assert (settings.get(
    "www.google.com",
    dotted_lookup=False) == "data"), settings.get("www.google.com")
assert settings.as_dict() == {"WWW.GOOGLE.COM": "data"}, settings.as_dict()
Пример #5
0
    env="ANSIBLE",  # Initial env/mode
)

app = FastAPI()


@app.get("/settings")
def read_root():
    return settings


@app.get("/settings/{setting_name}")
def read_item(setting_name: str):
    return {setting_name: settings.setting_name}


if settings.current_env == "ANSIBLE":  # this is the initial default
    assert settings.data_folder == "ansible/.teflo"

if settings.current_env == "PUPPET":  # only when TEFLO_MODE=puppet
    assert settings.data_folder == "puppet/.teflo"

assert settings.log_level == "info"  # might be exported TEFLO_DEBUG_MODE

assert settings.workspace == "."

print(settings.data_folder)
print(settings["log_remove"])
print(settings.get("verbosity"))
print(settings.LOG_LEVEL)
Пример #6
0
from __future__ import annotations

import yaml

from dynaconf import Dynaconf

settings = Dynaconf(
    settings_file="settings.yaml", environments=True, DOTTED_LOOKUP=False
)

assert settings.get("www.google.com") == "data", settings.get("www.google.com")
assert settings.as_dict() == {"WWW.GOOGLE.COM": "data"}, settings.as_dict()
Пример #7
0
else:
    settings_files = []

if user_settings_file.is_file():
    settings_files.append(str(user_settings_file))

settings = Dynaconf(
    envvar_prefix="CODELAB",
    # envvar_prefix False 将获取所有环境变量
    # envvar_prefix=False, # https://www.dynaconf.com/envvars/#custom-prefix
    # 'settings.py',
    # 'settings.toml'  '.secrets.toml'
    settings_files=settings_files, # todo ~/codelab_adapter/user_settings.py
) # 按顺序加载, .local

if not settings.get("ZMQ_LOOP_TIME"):
    # export CODELAB_ZMQ_LOOP_TIME = 0.01
    settings.ZMQ_LOOP_TIME = 0.02

if not settings.get("ADAPTER_HOME_PATH"):  # 环境
    settings.ADAPTER_HOME_PATH = str(pathlib.Path.home() / "codelab_adapter")

sys.path.insert(1, settings.ADAPTER_HOME_PATH)

# CN_PIP MIRRORS
if not settings.get("USE_CN_PIP_MIRRORS"):
    settings.USE_CN_PIP_MIRRORS = False  # may be overwriten by user settings
    if is_in_china():
        settings.USE_CN_PIP_MIRRORS = True
    
if not settings.get("CN_PIP_MIRRORS_HOST"):
Пример #8
0
from pathlib import Path

paths = environ.get("CONFIG_PATH", "").split(";")
settings_files = ["default_settings.toml", 'settings.toml', '.secrets.toml']

if paths != [""]:
    settings_files.extend(paths)

settings = Dynaconf(
    envvar_prefix="DYNACONF",
    settings_files=settings_files,
)

for key in ("common", "schedule", "rss_feeds", "youtube_feeds", "vk_feeds",
            "tokens", "unique_commands", "stickers", "links", "eggs"):
    value = settings.get(key, default=None)

    if isinstance(value, dict) \
       and key not in ("unique_commands", "stickers", "eggs"):
        for _ in value:
            globals()[_.upper()] = value[_]

    else:
        globals()[key.upper()] = value

TOKEN = environ.get("TOKEN", None) or TOKEN  # noqa
DB_PATH = environ.get("DB_PATH", None) or DB_PATH  # noqa

BASE_DIR = Path(__file__).parent.parent.parent
LOCALES_DIR = BASE_DIR / "locales"
Пример #9
0
from dynaconf import Dynaconf

settings = Dynaconf(
    settings_file="settings.toml",
    environments=True,
    # merge_enabled=True  # this enabled global merge of all files
)

print(settings.A)

assert settings.get("A").get("B").get("C") == "1"
assert settings.get("A").get("cousin").get("D") == "2"
Пример #10
0
settings_files = ["settings.toml", "other.toml"]

settings = Dynaconf(settings_files=settings_files)

expected_value = "s3a://kewl_bucket"

assert settings.s3_url == expected_value
assert settings.s3_url1 == expected_value
assert settings.s3_url2 == expected_value
assert settings.s3_url3 == expected_value

assert settings["s3_url"] == expected_value
assert settings["S3_URL"] == expected_value

assert settings.get("s3_url", default="s3://default") == expected_value
assert settings.get("S3_URL", default="s3://default") == expected_value

assert settings("s3_url", cast="@str") == expected_value
assert settings("S3_URL", cast="@str") == expected_value

expected = {
    "first_name": "Bruno",
    "morenested": {
        "last_name": "Rocha",
        "evenmore": {
            "full_name": "Bruno Rocha",
            "full_name2": "Bruno Rocha",
            "full_name3": "Bruno Rocha",
        },
    },
Пример #11
0
from dynaconf import Dynaconf

settings = Dynaconf(load_dotenv=True)

assert settings.get("UPSTREAM_ROOK.BUILD_ROOK_FROM_GIT") == "TRUE"

assert (settings.as_bool("UPSTREAM_ROOK.BUILD_ROOK_FROM_GIT") is
        True), settings.as_bool("UPSTREAM_ROOK.BUILD_ROOK_FROM_GIT")

assert settings.get("UPSTREAM_ROOK__BUILD_ROOK_FROM_GIT", cast="@bool") is True
Пример #12
0
from dynaconf import Dynaconf, constants

config = Dynaconf(
    envvar_prefix="EIA",
    load_dotenv=True,
    warn_dynaconf_global_settings=True,
    environments=True,
    default_env="eia",
    lowercase_read=False,
    default_settings_paths=constants.DEFAULT_SETTINGS_FILES,
)

APIKEY = config.get("APIKEY")
Пример #13
0
from dynaconf import Dynaconf

settings = Dynaconf(
    settings_files=["settings.toml", "settings.yaml"], environments=True
)


assert settings.SOME_DICT.value == "formatted: foo", settings.SOME_DICT.value

assert settings.INNER1.value == "inner1 str foo"
assert settings.INNER1.VALUE_LIST[0] == "list 0 foo"
assert settings.INNER1.INNER2.value == "inner2 str inner1 str foo"

assert settings.TOP_LEVEL_LIST[0] == "top list foo"
assert settings.TOP_LEVEL_LIST[3] == "a jinja formatted FOO"

assert settings.get("TOP_LEVEL_LIST")[0] == "top list foo"
assert settings.get("TOP_LEVEL_LIST")[3] == "a jinja formatted FOO"

settings.set("INITIAL", "@merge [9, 8, 7]")


settings.set("DATABASES.default.PARAMS", '@merge ["e", "f", "g"]')
Пример #14
0
settings_files = ["settings.toml", "other.toml"]

settings = Dynaconf(settings_files=settings_files)

expected_value = "s3a://kewl_bucket"

assert settings.s3_url == expected_value
assert settings.s3_url1 == expected_value
assert settings.s3_url2 == expected_value
assert settings.s3_url3 == expected_value

assert settings["s3_url"] == expected_value
assert settings["S3_URL"] == expected_value

assert settings.get("s3_url", default="s3://default") == expected_value
assert settings.get("S3_URL", default="s3://default") == expected_value

assert settings("s3_url", cast="@str") == expected_value
assert settings("S3_URL", cast="@str") == expected_value

expected = {
    "first_name": "Bruno",
    "morenested": {
        "last_name": "Rocha",
        "evenmore": {
            "full_name": "Bruno Rocha",
            "full_name2": "Bruno Rocha",
            "full_name3": "Bruno Rocha",
        },
    },
Пример #15
0
from __future__ import annotations

import os

from dynaconf import Dynaconf

settings = Dynaconf()

# first we set something
os.environ["DYNACONF_SOMETHING"] = "this exists"

settings.get("FOO")  # this is just to fire the loaders

os.environ["DYNACONF_SOMETHING"] = "changed to other thing"

# then we load it freshly
assert settings.get_fresh("SOMETHING") == "changed to other thing"

# then we remove it from environment
del os.environ["DYNACONF_SOMETHING"]

assert "DYNACONF_SOMETHING" not in os.environ

# then we read it freshly again
assert settings.get_fresh("SOMETHING") is None, settings.get_fresh("SOMETHING")

settings.set("wm", "i3")

assert settings.WM == "i3"

settings.EDITOR = "vim"
Пример #16
0
    settings_file="settings.toml",
    environments=True,
    validators=[
        Validator(
            "FOO",
            env="production",
            default=lambda st, va: "FOO is computed in prod",
        ),
        Validator("BAR", env="production", default="@format {this.foo}/BAR"),
        Validator("ZAZ",
                  env="production",
                  default="@jinja {{this.get('foo')}}/ZAZ"),
        Validator("FOO", env="development", required=True, eq="dev foo"),
    ],
)

assert settings2.FOO == "dev foo"
assert settings2.get("FOO") == "dev foo"
assert settings2["FOO"] == "dev foo"
assert settings2.foo == "dev foo"
assert settings2("foo") == "dev foo"

assert settings2.from_env("production").FOO == "FOO is computed in prod"
assert settings2.from_env("production").foo == "FOO is computed in prod"
assert settings2.from_env("production")["FOO"] == "FOO is computed in prod"
assert settings2.from_env("production")("FOO") == "FOO is computed in prod"
assert settings2.from_env("production").get("FOO") == "FOO is computed in prod"

assert settings2.from_env("production").BAR == "FOO is computed in prod/BAR"
assert settings2.from_env("production").ZAZ == "FOO is computed in prod/ZAZ"
Пример #17
0
from __future__ import annotations

from dynaconf import Dynaconf

settings = Dynaconf(settings_files="settings.yaml", environments=True)

print(settings.get("level1").get("level2").get("level3"))
print(settings.get("level1").get("level2"))
print(settings.get("level1"))

print(settings.get("level1.level2.level3"))
print(settings.get("level1.level2"))
print(settings.get("level1"))

print(settings.get("template"))
print(settings.get("value0"))
print(settings.get("level1.value1"))
print(settings.get("level1.level2.value2"))
print(settings.get("level1.level2.level3.value3"))

assert settings.get("level1.level2.level3").to_dict() == {
    "value3": "Whoohoo world/level3/jinja"
}
assert settings.get("level1.level2").to_dict() == {
    "value2": "HELLO world/level2/jinja",
    "level3": {
        "value3": "Whoohoo world/level3/jinja"
    },
}
assert settings.get("level1").to_dict() == {
    "template2": "Whoohoo @tpl@",
Пример #18
0
from __future__ import annotations

from dynaconf import Dynaconf

settings = Dynaconf(settings_files=["settings.toml"], )

assert settings.key == "value"
assert settings.number == 789
assert settings.a_dict.nested.other_level == "nested value"
assert settings["a_boolean"] is False
assert settings.get("DONTEXIST", default=1) == 1

for item in settings:
    print(item)

for key, value in settings.items():  # dict like iteration
    print(key, value)
Пример #19
0
from dynaconf import Dynaconf

settings = Dynaconf(
    envvar_prefix="INVENTORY_SCAN",
    settings_files=["settings.yaml", "settings.local.yaml", ".secrets.yaml"],
)

scans_metadata = {scan.url: scan for scan in settings.get("scans", [])}
Пример #20
0
from multiprocessing import cpu_count

from dynaconf import Dynaconf

from framework import dirs

settings = Dynaconf(
    core_loaders=["YAML"],
    environments=True,
    fresh_vars=["DATABASE_URL"],
    ignore_unknown_envvars=True,
    load_dotenv=True,
    root_path=dirs.DIR_CONFIG.as_posix(),
    settings_files=["settings.yml", ".secrets.yml"],
    yaml_loader="safe_load",
)

settings.PORT = settings.get("PORT") or 8000
settings.WEB_CONCURRENCY = (settings.get("WEB_CONCURRENCY")
                            or cpu_count() * 2 + 1)