Metadata-Version: 2.0
Name: tri.named-struct
Version: 0.3.0
Summary: tri.named_struct supplies classes that can be used like dictionaries and as objects with attribute access at the same time
Home-page: UNKNOWN
Author: Johan Lübcke
Author-email: johan.lubcke@trioptima.com
License: BSD
Keywords: tri.named_struct
Platform: UNKNOWN
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Requires-Dist: tri.declarative
Requires-Dist: tri.struct

.. image:: https://travis-ci.org/TriOptima/tri.named_struct.svg?branch=master
    :target: https://travis-ci.org/TriOptima/tri.named_struct
.. image:: http://codecov.io/github/TriOptima/tri.named_struct/coverage.svg?branch=master
    :target: http://codecov.io/github/TriOptima/tri.named_struct?branch=master

tri.named_struct
================

tri.named_struct supplies a class that can be used like dictionaries, but with a predefined set of possible key values:

Example
-------

.. code:: python

    from tri.named_struct import NamedStruct

    class MyNamedStruct(NamedStruct):
        foo = NamedStructField()
        bar = NamedStructField()

    m = MyNamedStruct(17, 42)
    assert m['foo'] == 17
    assert m.foo == 17
    assert m == dict(foo=17, bar=42)

    m.not_foo  # Will raise an AttributeError


Default values can be provided:

.. code:: python

    from tri.named_struct import NamedStruct

    class MyNamedStruct(NamedStruct):
        foo = NamedStructField()
        bar = NamedStructField()
        baz = NamedStructField(default='default')

    assert MyNamedStruct(17) == dict(foo=17, bar=None, baz='default')

There is also a functional way to defined a :code:`NamedStruct` subclass:

.. code:: python

    from tri.named_struct import named_struct

    MyNamedStruct = named_struct('foo, bar')
    m = MyNamedStruct(17, 42)
    assert m.foo == 17
    assert m.bar == 42


Running tests
-------------

You need tox installed then just :code:`make test`.


License
-------

BSD


Documentation
-------------

http://trinamedstruct.readthedocs.org.


=========
Changelog
=========

Here's the recent changes to tri.named_struct.

.. changelog::
    :version: dev
    :released: Ongoing

    .. change::
        :tags: docs

        Updated CHANGES.


