Source code for dynaconf.default_settings

import importlib
import os
import sys
import warnings

from dynaconf.utils import raw_logger
from dynaconf.utils import RENAMED_VARS
from dynaconf.utils import upperfy
from dynaconf.utils import warn_deprecations
from dynaconf.utils.files import find_file
from dynaconf.utils.parse_conf import parse_conf_data

try:
    from dotenv import load_dotenv
except ImportError:  # pragma: no cover
    load_dotenv = lambda *args, **kwargs: None  # noqa


[docs]def try_renamed(key, value, older_key, current_key): if value is None: if key == current_key: if older_key in os.environ: warnings.warn( "{0} is deprecated please use {1}".format( older_key, current_key ), DeprecationWarning, ) value = os.environ[older_key] return value
[docs]def get(key, default=None): value = os.environ.get(upperfy(key)) # compatibility with renamed variables for old, new in RENAMED_VARS.items(): value = try_renamed(key, value, old, new) return ( parse_conf_data(value, tomlfy=True) if value is not None else default )
[docs]def start_dotenv(obj=None, root_path=None): # load_from_dotenv_if_installed obj = obj or {} _find_file = getattr(obj, "find_file", find_file) root_path = ( root_path or getattr(obj, "_root_path", None) or get("ROOT_PATH_FOR_DYNACONF") ) raw_logger().debug( "Starting Dynaconf Dotenv %s", "for {0}".format(root_path) if root_path else "Base", ) dotenv_path = ( obj.get("DOTENV_PATH_FOR_DYNACONF") or get("DOTENV_PATH_FOR_DYNACONF") or _find_file(".env", project_root=root_path) ) load_dotenv( dotenv_path, verbose=obj.get("DOTENV_VERBOSE_FOR_DYNACONF", False), override=obj.get("DOTENV_OVERRIDE_FOR_DYNACONF", False), ) warn_deprecations(os.environ)
[docs]def reload(*args, **kwargs): start_dotenv(*args, **kwargs) importlib.reload(sys.modules[__name__])
# default proj root # pragma: no cover ROOT_PATH_FOR_DYNACONF = get("ROOT_PATH_FOR_DYNACONF", None) # Default settings file default_paths = ( "settings.py,.secrets.py," "settings.toml,settings.tml,.secrets.toml,.secrets.tml," "settings.yaml,settings.yml,.secrets.yaml,.secrets.yml," "settings.ini,settings.conf,settings.properties," ".secrets.ini,.secrets.conf,.secrets.properties," "settings.json,.secrets.json" ) SETTINGS_FILE_FOR_DYNACONF = get("SETTINGS_FILE_FOR_DYNACONF", default_paths) # # ENV SETTINGS # # In dynaconf 1.0.0 `NAMESPACE` got renamed to `ENV` # The environment variable to switch current env ENV_SWITCHER_FOR_DYNACONF = get( "ENV_SWITCHER_FOR_DYNACONF", "ENV_FOR_DYNACONF" ) # The current env by default is DEVELOPMENT # to switch is needed to `export ENV_FOR_DYNACONF=PRODUCTION` # or put that value in .env file # this value is used only when reading files like .toml|yaml|ini|json ENV_FOR_DYNACONF = get(ENV_SWITCHER_FOR_DYNACONF, "DEVELOPMENT") # This variable exists to support `from_env` method FORCE_ENV_FOR_DYNACONF = get("FORCE_ENV_FOR_DYNACONF", None) # Default values is taken from DEFAULT pseudo env # this value is used only when reading files like .toml|yaml|ini|json DEFAULT_ENV_FOR_DYNACONF = get("DEFAULT_ENV_FOR_DYNACONF", "DEFAULT") # Global values are taken from DYNACONF env used for exported envvars # Values here overwrites all other envs # This namespace is used for files and also envvars ENVVAR_PREFIX_FOR_DYNACONF = get("ENVVAR_PREFIX_FOR_DYNACONF", "DYNACONF") # The default encoding to open settings files ENCODING_FOR_DYNACONF = get("ENCODING_FOR_DYNACONF", "utf-8") # Merge objects on load MERGE_ENABLED_FOR_DYNACONF = get("MERGE_ENABLED_FOR_DYNACONF", False) # BY default `__` is the separator for nested env vars # export `DYNACONF__DATABASE__server=server.com` # export `DYNACONF__DATABASE__PORT=6666` # Should result in settings.DATABASE == {'server': 'server.com', 'PORT': 6666} # To disable it one can set `NESTED_SEPARATOR_FOR_DYNACONF=false` NESTED_SEPARATOR_FOR_DYNACONF = get("NESTED_SEPARATOR_FOR_DYNACONF", "__") # The env var specifying settings module ENVVAR_FOR_DYNACONF = get("ENVVAR_FOR_DYNACONF", "SETTINGS_FILE_FOR_DYNACONF") # Default values for redis configs default_redis = { "host": get("REDIS_HOST_FOR_DYNACONF", "localhost"), "port": int(get("REDIS_PORT_FOR_DYNACONF", 6379)), "db": int(get("REDIS_DB_FOR_DYNACONF", 0)), "decode_responses": get("REDIS_DECODE_FOR_DYNACONF", True), } REDIS_FOR_DYNACONF = get("REDIS_FOR_DYNACONF", default_redis) REDIS_ENABLED_FOR_DYNACONF = get("REDIS_ENABLED_FOR_DYNACONF", False) # Hashicorp Vault Project vault_scheme = get("VAULT_SCHEME_FOR_DYNACONF", "http") vault_host = get("VAULT_HOST_FOR_DYNACONF", "localhost") vault_port = get("VAULT_PORT_FOR_DYNACONF", "8200") default_vault = { "url": get( "VAULT_URL_FOR_DYNACONF", "{}://{}:{}".format(vault_scheme, vault_host, vault_port), ), "token": get("VAULT_TOKEN_FOR_DYNACONF", None), "cert": get("VAULT_CERT_FOR_DYNACONF", None), "verify": get("VAULT_VERIFY_FOR_DYNACONF", None), "timeout": get("VAULT_TIMEOUT_FOR_DYNACONF", None), "proxies": get("VAULT_PROXIES_FOR_DYNACONF", None), "allow_redirects": get("VAULT_ALLOW_REDIRECTS_FOR_DYNACONF", None), } VAULT_FOR_DYNACONF = get("VAULT_FOR_DYNACONF", default_vault) VAULT_ENABLED_FOR_DYNACONF = get("VAULT_ENABLED_FOR_DYNACONF", False) VAULT_PATH_FOR_DYNACONF = get("VAULT_PATH_FOR_DYNACONF", "dynaconf") VAULT_ROLE_ID_FOR_DYNACONF = get("VAULT_ROLE_ID_FOR_DYNACONF", None) VAULT_SECRET_ID_FOR_DYNACONF = get("VAULT_SECRET_ID_FOR_DYNACONF", None) # Only core loaders defined on this list will be invoked core_loaders = ["YAML", "TOML", "INI", "JSON", "PY"] CORE_LOADERS_FOR_DYNACONF = get("CORE_LOADERS_FOR_DYNACONF", core_loaders) # External Loaders to read vars from different data stores default_loaders = [ "dynaconf.loaders.env_loader", # 'dynaconf.loaders.redis_loader' # 'dynaconf.loaders.vault_loader' ] LOADERS_FOR_DYNACONF = get("LOADERS_FOR_DYNACONF", default_loaders) # Errors in loaders should be silenced? SILENT_ERRORS_FOR_DYNACONF = get("SILENT_ERRORS_FOR_DYNACONF", True) # always fresh variables FRESH_VARS_FOR_DYNACONF = get("FRESH_VARS_FOR_DYNACONF", []) # debug DEBUG_LEVEL_FOR_DYNACONF = get("DEBUG_LEVEL_FOR_DYNACONF", "NOTSET") DOTENV_PATH_FOR_DYNACONF = get("DOTENV_PATH_FOR_DYNACONF", None) DOTENV_VERBOSE_FOR_DYNACONF = get("DOTENV_VERBOSE_FOR_DYNACONF", False) DOTENV_OVERRIDE_FOR_DYNACONF = get("DOTENV_OVERRIDE_FOR_DYNACONF", False) # Currently this is only used by cli. INSTANCE_FOR_DYNACONF specifies python # dotted path to custom LazySettings instance. Last dotted path item should be # instance of LazySettings. INSTANCE_FOR_DYNACONF = get("INSTANCE_FOR_DYNACONF", None) # https://msg.pyyaml.org/load YAML_LOADER_FOR_DYNACONF = get("YAML_LOADER_FOR_DYNACONF", "full_load") # Use commentjson? https://commentjson.readthedocs.io/en/latest/ COMMENTJSON_ENABLED_FOR_DYNACONF = get( "COMMENTJSON_ENABLED_FOR_DYNACONF", False ) # Extra file, or list of files where to look for secrets # useful for CI environment like jenkins # where you can export this variable pointing to a local # absolute path of the secrets file. SECRETS_FOR_DYNACONF = get("SECRETS_FOR_DYNACONF", None) # To include extra paths based on envvar INCLUDES_FOR_DYNACONF = get("INCLUDES_FOR_DYNACONF", []) # To pre-load extra paths based on envvar PRELOAD_FOR_DYNACONF = get("PRELOAD_FOR_DYNACONF", []) # Files to skip if found on search tree SKIP_FILES_FOR_DYNACONF = get("SKIP_FILES_FOR_DYNACONF", []) # Backwards compatibility with renamed variables for old, new in RENAMED_VARS.items(): setattr(sys.modules[__name__], old, locals()[new])