Environment variables are now supported in two flavours
If an environment variable of the form
CONFIGGLUE_FOO_BAR is defined, it will be used to override the configuration value for option foo in section bar, according to the following precedence rules:
To illustrate, a few examples. Given the example from the quickstart guide, the following examples illustrate the precedence rules just mentioned.
Implicitly defined via schema defaults
$ python app.py
foo option has default value: 0
bar option has default value: False
Implicitly defined via environment variable (overriding schema defaults)
$ CONFIGGLUE_FOO=3 python app.py
foo option has been configured with value: 3
bar option has default value: False
Explicitly defined via command-line
$ CONFIGGLUE_FOO=3 python app.py --foo=2
foo option has been configured with value: 2
bar option has default value: False
Explicitly defined via configuration files
$ echo "[__main__]\nfoo = 5" > config.ini
$ python app.py
foo option has been configured with value: 5
bar option has default value: False
Implicitly defined via environment variable (overriding config file)
$ CONFIGGLUE_FOO=33 python app.py
foo option has been configured with value: 33
bar option has default value: False
In the configuration files, if an option has a value such as
$FOO
or
${FOO}
it will be interpolated using the FOO environment variable, or if that variable is not defined, it will fallback to the default value for that option.
Using the same example as shown in the quickstart guide, this use case can be illustrated as follows.
Specifying a value in the configuration file using an environment variable
$ echo "[__main__]\nfoo = \$BAZ" > config.ini
$ BAZ=33 python app.py
foo option has been configured with value: 33
If the environment variable is not defined, fallback to the default value
$ python app.py
foo option has default value: 0