Changelog
=========

0.5.2 (2012-11-19)
------------------

- Fixed an issue with `required` where the marshaller would not
  correctly convert a value to the provided value type.


0.5.1 (2012-11-16)
------------------

- Type-checking has been removed from the marshalling code::

    if not error and not isinstance(value, data_type):
        error = True

  This change was required to support "schema types" such as::

    import re

    match_email = re.compile(
        r"^(\w&.%#$&'\*+-/=?^_`{}|~]+!)*[\w&.%#$&'"
        r"\*+-/=?^_`{}|~]+@(([0-9a-z]([0-9a-z-]*[0-9a-z])"
        r"?\.)+[a-z]{2,6}|([0-9]{1,3}\.){3}[0-9]{1,3})$",
        re.IGNORECASE).match

    class email(unicode):
        def __new__(cls, string):
          if match_email(string):
              return string

          raise ValueError(u"Not a valid e-mail address.")


0.5.0 (2010-05-28)
------------------

- Fixed ``Errors`` class to use the more obtuse ``__getattr__``
  override; this fixes an issue where an attribute lookup of
  ``__class__`` would fail. [malthe]

- Added ``required`` decorator for field types; when we wrap a type
  with this decorator, inputs that do not validate (even the trivial
  input of the empty string) are given the input value as-is. Compare
  this to an optional field (the default setting) where the empty
  string will be interpreted as a non-input (unless it's a string type
  or another type which will accept the empty string). [malthe]

- Add __contains__/has_key support to the Error class. [wichert]

0.4.2 (2009-09-14)
------------------

- Added ``any`` builtin fallback. [malthe]

0.4.1 (2009-07-31)
------------------

- Added defaultdict emulation class. [malthe]

0.4 (2009-07-29)
----------------

- The selected action, if any, is available in the ``action``
  attribute of a form instance. [malthe]

- Even if form input does not validate, the input is available as-is
  in the ``data`` dictionary. [malthe, rnix]

- Request parameters can now be provided directly as the ``params``
  keyword argument. [malthe]

- Added ``get`` method to errors dictionary. [malthe]

- Errors can now be compared with each other to see if they are the
  same. This makes it easier to test without doctest.

- Made the truth test for the errors object check just for messages in
  itself or it's sub errors. This avoids having the errors object
  saying it is true after accessing a key for which no error exists
  (thus creating a new errors object). [jvloothuis]

- Changed the base class of errors from unicode to object. This makes
  it behave like one would expect when printing etc. [jvloothuis]

0.3.2 (2009-03-09)
------------------

- Shedding unused dependency on 'zope.interface' [jvloothuis]

0.3.1 (2008-10-27)
------------------

- Make it possible to set `prefix` as class attribute. [malthe]

- Fixed issue where action parameters would not get set. [malthe]

0.3 (2008-10-27)
----------------

- Marshalled data is no longer applied when no parameters are
  available from the request. [malthe]

- Made the `errors`-object subclass unicode instead of defaultdict and
  implemented custom string representation function which concatenates
  error messages. [malthe]

0.2 (2008-10-19)
----------------

- Created/improved the abilities for custom validation. [jvloothuis]

- Added form action support. [malthe]

- Reworked marshalling code to handle dynamic dictionary
  keys. [malthe]

- Implemented form data object which facilities the form processing
  flow from applying the request to committing changes to a context
  object. [malthe]

- Integrated the converter into the ``form`` module. [seletz]

- Added ``ValidationErrors`` object, which evaluates to True if validation
  errors occured. [seletz]

- Added ``unicode`` converter. [seletz]

- Added ``converter`` module to support converting and validating request
  parameters sent by a form. [seletz]

- Added logic to allow registering and acquiring template API
  components from templates. [malthe]

- Changed the Skin Template View to be a class, and added a minimal
  interface ISkinTemplate to access the template path [seletz]

- Fixed a bug where we did not tear down the tests correctly [seletz]

- Fixed bug where the INewRequest event handler would call
  templates when checking for their existence [seletz]

0.1 (2008-09-25)
----------------

- Initial release [malthe]

- Added support to dynamically register templates if they
  are added to a registered template directory [seletz]

