betterconfig

betterconfig -- A Better Config for Python


License
Other
Install
pip install betterconfig==0.2

Documentation

betterconfig

betterconfig provides a more convenient and extensible configuration language, and a simpler interface built on python's builtin ConfigParser format, along with a drastically simplified interface for loading configs.

Type Coercion Boilerplate Sucks

ConfigParser, like many config languages, treats all values as strings, meaning that when you have configs like this:

[config]
foo = 1
bar = a,list,of,strings
baz = just a plain old string

you end up with boilerplate that looks like this:

from ConfigParser import ConfigParser
MAP = {
    'foo': int,
    'bar': lambda x: x.split(','),
    'baz': str,
}
c = ConfigParser()
c.read('./foo.cfg')
config = {k:MAP[k](v) for k,v in c.items('config')}

Don't you really wish you could just do this:

[config]
foo = 1
bar = ['a', 'list', 'of', 'strings']
baz = "just a plain old string"

and drop the map?

import betterconfig
config = betterconfig.load('./foo.cfg')['config']

betterconfig supports all literal types supported by ast.literal_eval: strings, numbers, tuples, lists, dicts, booleans, and None.

More Flexibility in Config, Less Config by Module

We wanted a config language that was as easy to use as a settings module in django or flask (and nearly as extensible), but less magical to initialize, and slightly safer than something like this:

import importlib
settings = importlib.import_module('settings')

So we want a config that can do stuff like this:

top_level  = 'variables defined outside of sections'
include    = ['./include.cfg', 'include.d/*.cfg']

[section]
namespaced = True

And we don't want to have to iterate sections or items, we really just want to load it into a dict:

import betterconfig
settings = betterconfig.load('./fancy.cfg')

And if you're really in love with . notation, you can always do something silly like make a module settings.py that does something magical like:

import betterconfig
globals().update(betterconfig.load('./fancy.cfg'))

Installing

The betterconfig project lives on github, and is available via pip.

Installing v0.3 From Pip

sudo pip install betterconfig==0.3

Installing v0.3 From Source

curl https://github.com/axialmarket/betterconfig/archive/version_0.3.tar.gz | tar vzxf -
cd betterconfig
sudo python setup.py install

Running Tests

The betterconfig tests require py.test, which can be installed via pip.

sudo pip install pytest==2.5.2
py.test test_betterconfig.py

Authors and Contributors