Granula is a tool that aims to help maintain multi-file configurations for Python applications (with environments and more).
$ pipenv install granula
or just use pip (though you should definitely take a look at pipenv)
🌈🌈🌈
- Gathers configurations from multiple files or directories.
- Supports widely used file formats (YAML, JSON).
- Offers a small DSL that allows to load environment variables into config files.
- Manages different configuration environments (e.g. testing, production).
Create a config object from a directory with multiple configuration files:
>> import granula
>> config = granula.from_directory('examples/multi-file/settings')
>> config
Config({'name': 'Darth Vader', ...})
>> config.name
'Darth Vader'
>> config.family
Config({'fiancee': 'Padme Amidala', 'children': ['Luke Skywalker', 'Leia Organa']})
Files are parsed in lexicographic order. The values specified in the preceding files can be overwritten in the succeeding files.
Do the same in a recursive manner:
>> config = granula.from_directory(..., recursive=True)
Match YAML files using filename pattern:
>> config = granula.from_directory(..., pattern=granula.Extension('yaml'))
Do the same with a shell-style wildcard pattern:
>> config = granula.from_directory(..., pattern=granula.Wildcard('*.yaml'))
Match configuration files for different environments:
>> directory = 'examples/environments/settings'
>> testing = granula.from_directory(directory, pattern=granula.Environment('testing'))
>> production = granula.from_directory(directory, pattern=granula.Environment('production'))
Combine patterns in arbitrary ways:
>> pattern = granula.All(granula.Environment('testing'), granula.Extension('yaml'))
>> config = granula.from_directory(..., pattern=pattern)
Load environment variables into config files using a DSL, for example, in YAML:
variable: ${env VARIABLE}
Do the same with a default value:
variable: ${env VARIABLE | val 10}