Confing does configuration right.
Configuration defining and loading. The hard part of configuration isn't reading file formats anymore, it's managing it across a large (or even small) codebase.
The API is modeled after the logging
module to avoid collisions, however no
inheritance is enabled.
Getting started
Install via pip: pip install confing
Defining
In your module, define a configuration key you want to use.
import confing
from confing import data
confer = confing.getConfer('my_module')
confer.define(
data.Int(name='key_name', validator=data.Range(0, 10)).doc(
textwrap.dedent(
'''
The documentation of this configuration key. Can be read later
by iterating through the defined keys of a confer object.
''')))
confer.define(data.Dict(
data.Int(name='first').doc('Children can also be documented.'),
data.String(name='second').doc(
"Don't let your future developers ask what this key is for."),
name='').doc('And you can expose this to your sysadmins, end users, etc!'))
Then you can include it in your config data like so:
key_name: 5
Loading
And you can load it easily. Notice we don't handle the actual format, in this case yaml. Just load it into python objects first.
loaded_config = confer.load(yaml.load(file_obj))
loaded_config.key_name == 5