Metadata-Version: 2.0
Name: marten
Version: 0.5.0
Summary: Stupid simple Python configuration management
Home-page: https://github.com/nick-allen/marten
Author: Nick Allen
Author-email: nick.allen.cse@gmail.com
License: MIT
Platform: UNKNOWN
Requires-Dist: PyYAML (>=3.0)
Requires-Dist: six (>=1.0)
Provides-Extra: test
Requires-Dist: coverage (>=4.0); extra == 'test'
Requires-Dist: coveralls (>=1.1); extra == 'test'
Requires-Dist: mock (>=1.0); extra == 'test'
Requires-Dist: nose (>=1.0); extra == 'test'
Requires-Dist: tox (>=2.1); extra == 'test'

Marten
======

|Build Status| |Coverage Status| |PyPI version|

Stupid simple Python configuration management

Inspired by `node config <https://www.npmjs.com/package/config>`__, if
you've used it before, Marten will feel familiar with a couple of extras

Tested with Python 2.7 and 3.5

--------------

Install
=======

::

    > pip install marten

Usage
=====

Marten provides several ways to load configurations, the simplest being
the bundled config automatically created by Marten using files found in
the ``.marten/`` directory

::

    > mkdir .marten
    > echo "EXAMPLE = True" > .marten/default.py
    > marten
    {
        "EXAMPLE": true
    }

The ``marten`` command outputs the fully parsed content of the bundled
Marten config in JSON format

The bundled config is available in Python at ``marten.config``, and can
be accessed like a normal dictionary

::

    > python
    >>> from marten import config
    >>> config['EXAMPLE']
    True

Features
========

Swappable Configurations
------------------------

Marten can easily swap between different configurations using the
``MARTEN_ENV`` environment variable

The ``MARTEN_ENV`` variable defaults to ``default``

::

    > marten
    {
        "EXAMPLE": true
    }
    > echo "SECOND_FILE = 'This is a different environment'" > .marten/two.py
    > echo "THIRD_FILE = 'This is a third environment'" > .marten/three.py
    > MARTEN_ENV=two marten
    {
        "SECOND_FILE": "This is a different environment"
    }
    > MARTEN_ENV=three marten
    {
        "THIRD_FILE": "This is a third environment"
    }

Full Python
-----------

The configuration files are not parsed, but are imported as Python
modules

Only capitalized variables not starting with underscores are read into
the configuration, allowing other variables to be used for logic and
setup

::

    > echo "a = 1; _B = 2; FULL_PYTHON = a + _B == 3" > .marten/python.py
    > MARTEN_ENV=python marten
    {
        "FULL_PYTHON": true
    }

Multiple File Formats
---------------------

Marten is not limited to Python files

::

    > echo '{"KEY": "value"}' > .marten/formats.json
    > MARTEN_ENV=formats marten
    {
        "KEY": "value"
    }

Current supported formats:

-  Python
-  JSON
-  YAML

Environment Variable Expansion
------------------------------

Environment variables in values with the format ``$VAR`` or ``${VAR}``
are automatically expanded

Unset environment variables are unmodified

::

    > echo '{"REPLACED1": "This ${ENV}", "REPLACED2": "Second $ENV", "IGNORED": "${MISSING}"}' > .marten/environ.json
    > MARTEN_ENV=environ ENV=value marten
    {
        "IGNORED": "${MISSING}",
        "REPLACED1": "This value",
        "REPLACED2": "Second value"
    }

Merge Multiple Files
--------------------

Since Marten operates on filename and extension separately, two files
with the same name but different extensions are merged together in the
order they are loaded

::

    > echo 'PYTHON = True' > .marten/merge.py
    > echo '{"JSON": true}' > .marten/merge.json
    > echo 'YAML: true' > .marten/merge.yaml
    > MARTEN_ENV=merge marten
    {
        "JSON": true,
        "PYTHON": true,
        "YAML": true
    }

License
=======

Available under the MIT license

See LICENSE for more details

.. |Build Status| image:: https://travis-ci.org/nick-allen/marten.svg?branch=master
   :target: https://travis-ci.org/nick-allen/marten
.. |Coverage Status| image:: https://coveralls.io/repos/nick-allen/marten/badge.svg?branch=master&service=github
   :target: https://coveralls.io/github/nick-allen/marten?branch=master
.. |PyPI version| image:: https://badge.fury.io/py/marten.svg
   :target: https://badge.fury.io/py/marten


