configyaml 0.5.2
A config loading and parsing package
License: MIT license
Keywords: configyaml

configyaml
==========

.. image:: https://travis-ci.org/dropseedlabs/configyaml.svg?branch=master
    :target: https://travis-ci.org/dropseedlabs/configyaml

.. image:: https://img.shields.io/pypi/v/configyaml.svg
    :target: https://pypi.python.org/pypi/configyaml

.. image:: https://img.shields.io/pypi/l/configyaml.svg
    :target: https://pypi.python.org/pypi/configyaml

.. image:: https://img.shields.io/pypi/pyversions/configyaml.svg
    :target: https://pypi.python.org/pypi/configyaml
    

Usage
-----
The basic usage pattern is to extend these classes to create your own.

You need a loader:

.. code-block:: python

    from configyaml import loader

    from .config.root import Root

    class SibbellConfigLoader(loader.ConfigLoader):
        config_root_class = Root


Then design your config using additional classes. You need at least 1 to serve as the root class:

.. code-block:: python

    from configyaml.config import DictNode
    from .dependencies import Dependencies
    from .notifications import Notifications


    class Root(DictNode):
        """Root of the yaml file"""

        def __init__(self, *args, **kwargs):
            self._dict_fields = {
                        'dependencies': {
                            'class': Dependencies,
                            'required': True,
                            'default': [],
                        },
                        'notifications': {
                            'class': Notifications,
                            'required': True,  # no point right now if no notifications
                            'default': [],
                        }
                    }
            super(Root, self).__init__(*args, **kwargs)

        def _context_to_inject(self):
            """Make dependencies list available to notifcations"""
            return {'dependencies': self.dependencies}

Then to use it, simply create a loader using the configuration text content:

.. code-block:: python

    loader = SibbellConfigLoader(yaml_text)
    # can now access the configuration and any other properties/method added to their classes
    loader.is_valid()
    loader.errors
    loader.config_root.dependencies



=======
History
=======

0.5.2 (2019-09-02)
------------------

* Fix KeyError when using as_dict() with a missing required dict field


0.5.1 (2018-03-30)
------------------

* Fix ListNode passing wrong yaml node for child


0.5.0 (2018-03-30)
------------------

* Add support for "variables"


0.4.1 (2018-01-31)
------------------

* Give DictNode default instance access to parent and context
* Update README badges


0.4.0 (2017-06-07)
------------------

* Add RegexNode
* DictNode fields know what their dict key was


0.3.0 (2017-05-31)
------------------

* Add TypelessNode
* Add BoolNode
* Use yaml.safe_load
* Allow DictNode field to have a default value of None


0.2.0 (2017-04-05)
------------------

* Cleanup package release tooling and documentation
* Fix a bit of broken documentation
* Start some basic Sphinx documentation for classes


0.1.0 (2017-03-30)
------------------

* First release on PyPI.