betterconfig -- A Better Config for Python
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.