
Changelog
=========

5.0.0 (2016-04-13)
------------------

* Added the ``fields.InheritableFields`` base. It allows subclassing and it's intended for multiple inheritance scenarios. Yes, 
  yes, this enables lots pain and suffering, but some people just like it that way.
* Simplified the interfaces for the builtin sealers (the required argument is gone as it was redundant, and the remaining 
  arguments are swapped). Now they must be a function that take just two arguments: ``fields, defaults``.

4.0.0 (2016-01-28)
------------------

* Added ``__all__`` and ``factory`` conveniences. Removed :obj:`fields.Factory` from the public API since it need some special
  care with it's use (it's a damn metaclass after all).
* Added ``make_init_func`` into public API for advanced uses (combine with ``factory`` and ``class_sealer``).

3.0.0 (2015-10-04)
------------------

* Disallowed creating containers with fields with "dunder" names. E.g.: ``class Foo(Fields.__foo__):`` is disallowed.

2.4.0 (2015-06-13)
------------------

* Similarly to ``fields.Fields``, added three new bases:

  * ``fields.BareFields`` (implements ``__init__``).
  * ``fields.ComparableMixin`` (implements ``__eq__``, ``__ne__``, ``__lt__``, ``__gt__``, ``__le__``, ``__ge__`` and ``__hash__``).
  * ``fields.PrintableMixin`` (implements ``__repr__``).

* Improved reference section in the docs.
* Added ``fields.ConvertibleFields`` and ``fields.ConvertibleMixin``. They have two convenience properties: ``as_dict`` and `as_tuple``.

2.3.0 (2015-01-20)
------------------

* Allowed overriding ``__slots__`` in ``SlotsFields`` subclasses.

2.2.0 (2015-01-19)
------------------

* Added ``make_init_func`` as an optional argument to ``class_sealer``. Rename the ``__base__`` option to just ``base``.

2.1.1 (2015-01-19)
------------------

* Removed bogus ``console_scripts`` entrypoint.

2.1.0 (2015-01-09)
------------------

* Added ``SlotsFields`` (same as ``Fields`` but automatically adds ``__slots__`` for memory efficiency on CPython).
* Added support for default argument to Tuple.

2.0.0 (2014-10-16)
------------------

* Made the __init__ in the FieldsBase way faster (used for ``fields.Fields``).
* Moved ``RegexValidate`` in ``fields.extras``.

1.0.0 (2014-10-05)
------------------

* Lots of internal changes, the metaclass is not created in a closure anymore. No more closures.
* Added ``RegexValidate`` container creator (should be taken as an example on using the Factory metaclass).
* Added support for using multiple containers as baseclasses.
* Added a ``super()`` `sink` so that ``super().__init__(*args, **kwargs)`` always works. Everything inherits from a
  baseclass that has an ``__init__`` that can take any argument (unlike ``object.__init__``). This allows for flexible
  usage.
* Added validation so that you can't use conflicting field layout when using multiple containers as the baseclass.
* Changed the __init__ function in the class container so it works like a python function w.r.t. positional and keyword
  arguments. Example: ``class MyContainer(Fields.a.b.c[1].d[2])`` will function the same way as ``def func(a, b, c=1,
  d=2)`` would when arguments are passed in. You can now use ``MyContainer(1, 2, 3, 4)`` (everything positional) or
  ``MyContainer(1, 2, 3, d=4)`` (mixed).

0.3.0 (2014-07-19)
------------------

* Corrected string repr.

0.2.0 (2014-06-28)
------------------

* Lots of breaking changes. Switched from __call__ to __getitem__ for default value assignment.

0.1.0 (2014-06-27)
------------------

* Alpha release.
