octoconf
Multi-profile supported, flexible config library for Python 2 & 3.
Features
- 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
Installation
pip install octoconf
Config format
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!
Usage
-
- 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.
Examples YAML files
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
Bugs or suggestions? Visit the issue tracker.