Multi-profile supported, flexible config library for Python 2 & 3.
- Allow multiple config profiles in one YAML file
- Allow include multiple YAML files
- Overridable profile selection from code for special use-cases (e.g. config for testing)
- Inheritable config profiles, what makes profile merges by dictionaries. (the native YAML bookmarking is also available)
- Can use variables in the config file
pip install octoconf
An octoconf config file is pure YAML file with some reserved keywords:
USED_CONFIG>: <node_name>
in the file root- you can specify the name of default config profile
<INCLUDE: <yml_path(s)>
in the file root- this octoconf file(s) will be included
<BASE: <node_name>
in the 2nd level- this will used for making (merge based) inheritance between profiles
The profile nodes should be on 1st level!
- You can load config from string with
loads()
: import octoconf config = octoconf.loads(yaml_string) print(config)
- You can load config from string with
- Or directly from StringIO (e.g. from file) with
load()
: import octoconf with open('config.yml') as fd: config = octoconf.load(fd) print(config)
- Or directly from StringIO (e.g. from file) with
Please check the features docs for explain octoconf's features.
USED_CONFIG>: UserConfig
<INCLUDE: vendor.defaults.yml
# This config overrides the production preset (from vendor.defaults.yml file)
UserConfig:
<BASE: ProductionConfig
App:
TITLE: "Amazing Foobar"
Flask:
SQLALCHEMY_DATABASE_URI: "sqlite:///${SERVER}/app.sqlite"
For more examples, please check the examples directory.
Bugs or suggestions? Visit the issue tracker.