Extending¶
Creating new loaders¶
In your project i.e called myprogram
create your custom loader.
myprogram/my_custom_loader.py
def load(obj, env=None, silent=True, key=None, filename=None):
"""
Reads and loads in to "obj" a single key or all keys from source
:param obj: the settings instance
:param env: settings current env (upper case) default='DEVELOPMENT'
:param silent: if errors should raise
:param key: if defined load a single key, else load all from `env`
:param filename: Custom filename to load (useful for tests)
:return: None
"""
# Load data from your custom data source (file, database, memory etc)
# use `obj.set(key, value)` or `obj.update(dict)` to load data
# use `obj.logger.debug` to log your loader activities
# use `obj.find_file('filename.ext')` to find the file in search tree
# Return nothing
In the .env
file or exporting the envvar define:
LOADERS_FOR_DYNACONF=['myprogram.my_custom_loader', 'dynaconf.loaders.env_loader']
Dynaconf will import your myprogram.my_custom_loader.load
and call it.
IMPORTANT: the'dynaconf.loaders.env_loader'
must be the last in the loaders list if you want to keep the behavior of having envvars to override parameters.
In case you need to disable all external loaders and rely only the settings.*
file loaders define:
LOADERS_FOR_DYNACONF=false
In case you need to disable all core loaders and rely only on external loaders:
CORE_LOADERS_FOR_DYNACONF='[]' # a toml empty list