octoconf

Multi-profile supported, flexible config library


Keywords
yaml, config, multi-profile, inheritance, python
License
GPL-3.0
Install
pip install octoconf==0.2.2

Documentation

Logo

octoconf

Python Package Build Status Server Dependency Status Code Quality Server Test Coverage License

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)
  • Or directly from StringIO (e.g. from file) with load():
    import octoconf
    
    with open('config.yml') as fd:
        config = octoconf.load(fd)
    print(config)

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.