yamlenv

Interpolate Yaml with environmental variables

Downloads
3.6K
Stars
23
Committers
4

Yamlenv

|Build Status| |PyPi package|

Interpolate YaML files with environmental variables and other YaML files.

Given a YaML string like:

.. code-block:: yaml

a: ${A}
b: 2

and an environmental variable $A with value hello, yamlenv.load would return:

.. code-block:: python

{
    a: 'hello',
    b: 2
}

Including YAML literals as environment variables is also supported - so if the environment variable $A was set to false, yamlenv.load would return:

.. code-block:: python

{
    a: False,
    b: 2
}

Default values are supported:

.. code-block:: python

yamlenv.load('''
    a: ${A:-hello}
    b: 2
''') == {
    'a': 'hello',
    'b': 2
}

As in Bash, defaulting can be done with either :- (to not allow empty defaults) or with - to allow empty values.

The environmental variable can be embedded in a larger string, too:

.. code-block:: python

yamlenv.load('''
    a: foo ${A:-bar} baz
    b: 2
''') == {
    'a': 'foo bar baz',
    'b': 2
}

More than one environmental variable can appear in a string:

.. code-block:: python

yamlenv.load('''
    a: foo ${A:-bar} ${B:-baz}
    b: 2
''') == {
    'a': 'foo bar baz',
    'b': 2
}

YaML files can include other YaML files, too. E.g. if b.yaml contains "2", then:

.. code-block:: python

yamlenv.load('''
    a: 1
    b: !include b.yaml
''') == {
    'a': 1
    'b': 2
}

The included YaML file can be as complex as necessary.

More examples are available in the tests.

.. |Build Status| image:: https://travis-ci.org/lbolla/yamlenv.svg?branch=master :target: https://travis-ci.org/lbolla/yamlenv

.. |PyPi package| image:: https://badge.fury.io/py/yamlenv.svg :target: https://badge.fury.io/py/yamlenv