Configuration from Files¶
ResConfig
understands INI (.ini), JSON (.json), TOML
(.toml), and YAML (.yaml or .yml). If not given, the file format
is inferred from these filename extensions. The filename with no
extension is assumed to be of INI.
Merge Behavior¶
When multiple files are supplied, ResConfig
handles them in
two different ways, depending on the merge_config_files
switch. When True
, all existing files are read, but merging
will be in the reverse of the input file list. For example, in the
following case,
config = ResConfig(config_files=["myconf.yml",
"~/.myconf.yml,
"/etc/myconf.yml"],
merge_config_files=True)
the configurations read from these files are merged in the following order: /etc/myconf.yml, ~/.myconf.yml, and myconf.yml. This effectively allows overriding configuration based on environment, i.e., personal configuration has a higher precedence to the system configuration in this example, typical of UNIX-like systems.
When False
, only the first existing file will be read. For
example, suppose that ~/.myconf.yml and /etc/myconf.yml exist but
not myconf.yml. Then
config = ResConfig(config_files=["myconf.yml",
"~/.myconf.yml,
"/etc/myconf.yml"],
merge_config_files=False)
will read only from ~/.myconf.yml. ResCongif
skips
myconf.yml and ignores /etc/myconf.yml.
The default behavior is merge_config_files=True
.
In general, non-existing files are simply skipped without throwing errors.
The “~
” character in file paths will be expanded to the path
defined in the HOME
environment variable.
File Types¶
ResConfig
understands the following file formats:
INI (.ini)
JSON (.json)
TOML (.toml)
YAML (.yaml or .yml)
with the given filename extensions.
By default, a filename without extension is assumed to be of INI
type. If you wish to explicitly specify file type, you may do so using
a ConfigPath
subclass as follows:
from resconfig.io.paths import YAMLPath
config = ResConfig(config_files=[YAMLPath("myconf"),
YAMLPath("~/.myconf),
YAMLPath("/etc/myconf")])
This way, all the files are considered to be of YAML type, regardless
of extension. ResConfig
supplies INIPath
,
JSONPath
, TOMLPath
, and YAMLPath
for this
purpose.