Metadata-Version: 1.0
Name: betterconfig
Version: 0.3
Summary: betterconfig -- A Better Config for Python
Home-page: https://github.com/axialmarket/betterconfig
Author: Matt Story
Author-email: matt.story@axial.net
License: 3-BSD
Description: ============
        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.
        
        .. _ast.literal_eval: http://docs.python.org/2/library/ast.html#ast.literal_eval
        
        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_.
        
        .. _github: https://github.com/axialmarket/betterconfig
        .. _pip: https://pypi.python.org/pypi/betterconfig/0.3
        
        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
        ========================
        
        | Matthew Story <matt.story@axial.net>
        | Jon Rosebaugh <jon@inklesspen.com>
        | Inspired By: http://stackoverflow.com/a/6209146
        | Inspired By: http://stackoverflow.com/a/2819788
        
Platform: UNKNOWN
