Advanced Usage¶
Yeah Dynamic is part of the name of this library so you can do lots of things :)
Customizing the settings object¶
Sometimes you want to override settings for your existing Package or Framework lets say you have a conf module exposing a config object and used to do:
from myprogram.conf import config
Now you want to use Dynaconf, open that or and do:
# coding: utf-8
from dynaconf import LazySettings
config = LazySettings(GLOBAL_ENV_FOR_DYNACONF="MYPROGRAM")
Now you can use instead of ~~DYNACONF_FOO=bar~~
Switching working environments¶
To switch the programatically you can use or .
Using context manager
from dynaconf import settings
with settings.using_env('envname'):
# now values comes from [envmane] section of config
assert settings.HOST == 'host.com
Using env setter
from dynaconf import settings
settings.setenv('envname')
# now values comes from [envmane] section of config
assert settings.HOST == 'host.com'
settings.setenv()
# now working env are back to previous
Customizations¶
It is possible to customize how your project will load settings, example: You want your users to customize a settings file defined in and you want environment variables to be loaded from
GLOBAL_ENV_FOR_DYNACONF = "PROJECTNAME"
"""This defines which environment variable global prefix dynaconf will load
That means that `export PROJECTNAME_FOO=1` will be loaded to `duanconf.settings.FOO
On command line it is possible to check it with `dynaconf list -k foo`"""
ENVVAR_FOR_DYNACONF = "PROJECTNAME_SETTINGS"
"""This defines which path dynaconf will look to load config files
example: export PROJECTNAME_SETTINGS=/path/to/settings.toml and the format can be
.ini, .json, .yaml or .toml
e.g::
export PROJECTNAME_SETTINGS=settings.toml
[default]
FOO = 1
[development]
FOO = 2
[production]
FOO = 3
OR::
export PROJECTNAME_SETTINGS=settings.yaml
default:
foo: 1
development:
foo: 2
production:
foo: 3
It is also possible to pass a list of files::
export PROJECTNAME_SETTINGS=settings.toml,other_settings.yaml,another.json
The variables will be cascaded in the defined order (last wins the precedence)
The environment variables wins precedence over all!
"""
# load dynaconf
settings = LazySettings(
GLOBAL_ENV_FOR_DYNACONF=GLOBAL_ENV_FOR_DYNACONF,
ENVVAR_FOR_DYNACONF=ENVVAR_FOR_DYNACONF
)
Then the working environment can now be switched using