Changelog
=========

Here you can see the full list of changes between each Cerberus release.

Version 0.9.2
-------------

Released on Semptember 23, 2015

- Fix: don't rely on deepcopy since it can't properly handle complex objects in
  Python 2.6.

Version 0.9.1
-------------

Released on July 7 2015

- Fix: 'required' is always evaluated, independent of eventual missing
  dependencies. This changes the previous behaviour whereas a required field
  with dependencies would only be reported as missing if all dependencies were
  met. A missing required field will always be reported. Also see the
  discussion in https://github.com/nicolaiarocci/eve/pull/665.

Version 0.9
-----------

Released on June 24 2015.
Codename: 'Mastrolindo'.

- New: 'oneof' rule which provides a list of definitions in which only one
  should validate (C.D. Clark III).
- New: 'noneof' rule which provides a list of definitions that should all not
  validate (C.D. Clark III).
- New: 'anyof' rule accepts a list of definitions and checks that one
  definition validates (C.D. Clark III).
- New: 'allof' rule validates if if all definitions validate (C.D. Clark III).
- New: 'validator.validated' takes a document as argument and returns
  a validated document or 'None' if validation failed (Frank Sachsenheim).
- New: PyPy support (Frank Sachsenheim).
- New: Type coercion (Brett).
- New: Added 'propertyschema' validation rule (Frank Sachsenheim).

- Change: Use 'str.format' in error messages so if someone wants to override
  them does not get an excpetion if arguments are not passed. Closes #105
  (Brett).
- Change: 'keyschema' renamed to 'valueschema', print a deprecation warning
  (Frank Sachsenheim).
- Change: 'type' can also be a list of types (Frank Sachsenheim).

- Fix: useages of 'document' to 'self.document' in '_validate' (Frank
  Sachsenheim).
- Fix: when 'items' is applied to a list, field name is used as key for
  'validator.errors', and offending field indexes are used as keys for field
  errors ({'a_list_of_strings': {1: 'not a string'}}) 'type' can be a list of
  valid types.
- Fix: Ensure that additional `**kwargs` of a subclass persist through
  validation (Frank Sachsenheim).
- Fix: improve failure message when testing against multiple types (Frank
  Sachsenheim).
- Fix: ignore 'keyschema' when not a mapping (Frank Sachsenheim).
- Fix: ignore 'schema' when not a sequence (Frank Sachsenheim).
- Fix: allow_unknown can also be set for nested dicts. Closes #75 (Tobias
  Betz).
- Fix: raise SchemaError when an unallowed 'type' is used in conjunction with
  'schema' rule (Tobias Betz).

- Docs: added section that points out that YAML, JSON, etc. can be used to
  define schemas (C.D. Clark III).
- Docs: Improve 'allow_unknown' documentation (Frank Sachsenheim).

Version 0.8.1
-------------

Released on Mar 16 2015.

- Fix: dependency on a sub-document field does not work. Closes #64.
- Fix: readonly validation should happen before any other validation.
  Closes #63.
- Fix: allow_unknown does not apply to sub-dictionaries in a list. Closes #67.
- Fix: two tests being ignored because of name typo.
- Fix: update mode does not ignore required fields in subdocuments. Closes #72.
- Fix: allow_unknown does not respect custom rules. Closes #66.
- Fix typo in docstrings (Riccardo).

Version 0.8
-----------

Released on Jan 7 2015.

- 'dependencies' also supports dependency values.
- 'allow_unknown' can also be set to a validation schema, in which case unknown
  fields will be validated against it. Closes nicolaiarocci/eve#405.
- New function-based custom validation mode (Luo Peng).
- Fields with empty definitions in schema were reported as non-existent. Now
  they are considered as valid, whatever their value is (Jaroslav Semančík).
- If dependencies are precised for a 'required' field, then the presence of the
  field is only validated if all dependencies are present (Trong Hieu HA).
- Documentation typo (Nikita Vlaznev #55).
- [CI] Add travis_retry to pip install in case of network issues (Helgi Þormar
  Þorbjörnsson #49)

Version 0.7.2
-------------

Released on Jun 19 2014.

- Successfully validate int as float type (Florian Rathgeber).

Version 0.7.1
-------------

Released on Jun 17 2014.

- Validation schemas are now validated up-front. When you pass a Schema to the
  Validator it will be validated against the supported ruleset (Paul Weaver).
  Closes #39.
- Custom validators also have access to a special 'self.document' variable that
  allows validation of a field to happen in context of the rest of the document
  (Josh Villbrandt).
- Validator options like 'allow_unknown' and 'ignore_none_values' are now taken
  into consideration when validating sub-dictionaries. Closes #40.

Version 0.7
-----------

Released on May 16 2014.

- Python 3.4 is now supported.
- tox support.
- Added 'dependencies' validation rule (Lujeni).
- Added 'keyschema' validation rule (Florian Rathgeber).
- Added 'regex' validation rule. Closes #29.
- Added 'set' as a core data type. Closes #31.
- Not-nullable fields are validated independetly of their type definition
  (Jaroslav Semančík).
- Python trove classifiers added to setup.py. Closes #32.
- 'min' and 'max' now apply to floats and numbers too. Closes #30.

Version 0.6
-----------

Released on February 10 2014

- Added 'number' data type, which validates against both float and integer
  values (Brandon Aubie).
- Added support for running tests with py.test
- Fix non-blocking problem introduced with 0.5 (Martin Ortbauer).
- Fix bug when _error() is calld twice for a field (Jaroslav Semančík).
- More precise error message in rule 'schema' validation (Jaroslav Semančík).
- Use 'allowed' field for integer just like for string (Peter Demin).

Version 0.5
-----------

Released on December 4 2013

- 'validator.errors' now returns a dictionary where keys are document fields
  and values are lists of validation errors for the field.
- Validator instances are now callable. Instead of `validated
  = validator.validate(document)` you can now choose to do 'validated
  = validator(document)' (Eelke Hermens).

Version 0.4.0
-------------

Released on September 24 2013.

- 'validate_update' is deprecated and will be removed with next release. Use
  'validate' with 'update=True' instead. Closes #21.
- Fixed a minor encoding issue which made installing on Windows/Python3
  impossible. Closes #19 (Arsh Singh).
- Fix documentation typo (Daniele Pizzolli).
- 'type' validation is always performed first (only exception being
  'nullable'). On failure, subsequent rules on the same field are skipped.
  Closes #18.

Version 0.3.0
-------------

Released on July 9 2013.

- docstrings now conform to PEP8.
- `self.errors` returns an empty list if validate() has not been called.
- added validation for the 'float' data type.
- 'nullable' rule added to allow for null field values to be accepted in
  validations. This is different than required in that you can actively change
  a value to None instead of omitting or ignoring it. It is essentially the
  ignore_none_values, allowing for more fine grained control down to the field
  level (Kaleb Pomeroy).

Version 0.2.0
-------------

Released on April 18 2013.

- 'allow_unknown' option added.

Version 0.1.0
-------------

Released on March 15 2013.
Codename: 'Claw'.

- entering beta phase.
- support for Python 3.
- pep8 and pyflakes fixes (Harro van der Klauw).
- removed superflous typecheck for empty validator (Harro van der Klauw).
- 'ignore_none_values' option to ignore None values when type checking (Harro
  van der Klauw).
- 'minlenght' and 'maxlength' now apply to lists as well (Harro van der Klauw).


Version 0.0.3
-------------

Released on January 29 2013

- when a list item fails, its offset is now returned along with the list name.
- 'transparent_schema_rules' option added.
- 'empty' rule for string fields.
- 'schema' rule on lists of arbitrary lenght (Martjin Vermaat).
- 'allowed' rule on strings (Martjin Vermaat).
- 'items' (dict) is now deprecated. Use the upgraded 'schema' rule instead.
- AUTHORS file added to sources.
- CHANGES file added to sources.


Version 0.0.2
-------------

Released on November 22 2012.

- Added support for addition and validation of custom data types.
- Several documentation improvements.

Version 0.0.1
-------------

Released on October 16 2012.

First public preview release.
