# salt.serializers.yamlex

YAMLEX is a format that allows for things like sls files to be more intuitive.

It's an extension of YAML that implements all the salt magic: - it implies omap for any dict like. - it implies that string like data are str, not unicode - ...

For example, the file states.sls has this contents:

    foo:
      bar: 42
      baz: [1, 2, 3]

The file can be parsed into Python like this

    from salt.serializers import yamlex

    with open('state.sls', 'r') as stream:
        obj = yamlex.deserialize(stream)

Check that `obj` is an OrderedDict

    from collections import OrderedDict

    assert isinstance(obj, dict)
    assert isinstance(obj, OrderedDict)

yamlex __repr__ and __str__ objects' methods render YAML understandable string. It means that they are template friendly.

    print '{0}'.format(obj)

returns:

    {foo: {bar: 42, baz: [1, 2, 3]}}

and they are still valid YAML:

    from salt.serializers import yaml
    yml_obj = yaml.deserialize(str(obj))
    assert yml_obj == obj

yamlex implements also custom tags:

!aggregate

> > this tag allows structures aggregation.

> For example:

>     placeholder: !aggregate foo
>     placeholder: !aggregate bar
>     placeholder: !aggregate baz

> is rendered as

>     placeholder: [foo, bar, baz]

!reset

> > this tag flushes the computing value.

>     placeholder: {!aggregate foo: {foo: 42}}
>     placeholder: {!aggregate foo: {bar: null}}
>     !reset placeholder: {!aggregate foo: {baz: inga}}

> is roughly equivalent to

>     placeholder: {!aggregate foo: {baz: inga}}

Document is defacto an aggregate mapping.

salt.serializers.yamlex.deserialize(stream_or_string, **options)

  Deserialize any string of stream like object into a Python data structure.

  Parameters:

    - stream_or_string -- stream or string to deserialize.

    - options -- options given to lower yaml module.

salt.serializers.yamlex.serialize(obj, **options)

  Serialize Python data to YAML.

  Parameters:

    - obj -- the data structure to serialize

    - options -- options given to lower yaml module.