News
====

.. contents::

1.2.2
-----

* Added keyword argument ``force_defaults`` to
  :func:`formencode.htmlfill.render`; when this is True (the default)
  this will uncheck checkboxes, unselect select boxes, etc., when a
  value is missing from the default dictionary.  

* Updated German translation

1.2.1
-----

* Be more careful about ``unicode(Invalid(...))``, to make sure it
  always returns unicode.

* Fix broken :mod:`formencode.national` zip code validators.

* In :mod:`formencode.national` only warn about the pycountry or TG
  requirement when creating validators that require them.

* Fix another :mod:`formencode.htmlfill` error due to a field with
  no explicit value.

1.2
---

* Added :class:`formencode.validators.IPAddress`, validating IP
  addresses, from Leandro Lucarella.

* Added :meth:`formencode.api.Invalid.__unicode__`

* In :mod:`formencode.htmlfill` use a default encoding of utf8 when
  handling mixed ``str``/``unicode`` content.  Also do not modify
  ``<input type="image">`` tags (previously ``src`` would be
  overwritten, for no good reason).

* In :class:`formencode.validators.Email` allow single-character
  domain names (like x.com).

* Make :class:`formencode.validators.FieldsMatch` give a normal
  ``Invalid`` exception if you pass it a non-dictionary.  Also treat
  all missing keys as the empty string (previously the first key was
  required and would raise KeyError).

* :class:`formencode.validators.Number` works with ``inf`` float
  values (before it would raise a OverflowError).
  
* The ``tw`` locale has been renamed to the more standard ``zh_TW``.

* Added Japanese and Turkish translations.

* Fixed some outdated translations and errors in Spanish and Greek
  translations. Translations now managed with `Babel
  <http://babel.edgewall.org/>`_.

1.1
---

* Fixed the ``is_empty()`` method in
  :class:`formencode.validators.FieldStorageUploadConverter`; 
  previously it returned the opposite of the intended result.

* Added a parameter to ``htmlfill.render()``: ``prefix_error``.  If
  this parameter is true (the default) then errors automatically go
  before the input field; if false then they go after the input field.

* Remove deprecated modules: ``fields``, ``formgen``, ``htmlform``,
  ``sqlformgen``, and ``sqlschema``.

* Added ``formencode.htmlrename``, which renames HTML inputs.

* In ``formencode.htmlfill``, non-string values are compared usefully
  (e.g., a select box with integer values).

* The validators ``Int`` and ``Number`` both take min/max arguments
  (from Shannon Behrens).

* Validators based on ``formencode.validators.FormValidator`` will not
  treat ``{}`` as an empty (unvalidated) value.

* Some adjustments to the URL validator.

* :class:`formencode.compound.All` does not handle empty values,
  instead relying on sub-validators to check for emptiness.

* Fixed the ``if_missing`` attribute in
  :class:`formencode.foreach.ForEach`; previously it would be the same
  list instance, so if you modified it then it would effect future
  ``if_missing`` values (reported by Felix Schwarz).

* Added formatter to :mod:`formencode.htmlfill`, so you can use
  ``<form:error name="field_name" formatter="ignore" />`` -- this will
  cause the error to be swallowed, not shown to the user.

* Added :class:`formencode.validators.XRI` for validation i-names,
  i-numbers, URLs, etc (as used in OpenID).

* Look in ``/usr/share/locale`` for locale files, in addition to the
  normal locations.

* Quiet Python 2.6 deprecation warnings.

* Fix :class:`formencode.validators.URL`, which was accepting illegal
  characters (like newlines) and did not accept http://domain:PORT/

1.0.1
-----

* ``chained_validators`` were removed from Schema somehow; now
  replaced and working.

* Put in missing ``htmlfill.render(error_class=...)`` parameter (was
  documented and implemented, but ``render()`` did not pass it
  through).

1.0
---

* Added ``formencode.schema.SimpleFormValidator``, which wraps a
  simple function to make it a validator.

* Changed the use of ``chained_validators`` in Schemas, so that all
  chained validators get run even when there are previous errors (to
  detect all the errors).

* While something like ``Int.to_python()`` worked, other methods like 
  ``Int.message(...)`` didn't work.  Now it does.

* Added Italian, Finnish, and Norwegian translations.

0.9
---

Backward incompatible changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* The notion of "empty" has changed to include empty lists,
  dictionaries, and tuples.  If you get one of these values passed
  into (or generated by) a validator with ``not_empty=True`` you can
  get exceptions where you didn't previously.

Enhancements
~~~~~~~~~~~~

* Added support for Paste's MultiDict dictionary as input to
  Schema.to_python, by converting it to a normal dict via MultiDict.mixed.
  Previously MultiDicts wouldn't work with CompoundValidators (like
  ForEach)

* Added encoding parameter to htmlfill, which will handle cases when mixed
  str and unicode objects are used (turning all str objects into unicode)

* Include ``formencode.validators.InternationalPhoneNumber`` from
  W-Mark Kubacki.

* ``validators.Int`` takes ``min`` and ``max`` options (from Felix
  Schwarz).

* You can control the missing message (which by default is just
  "Missing Value") using the message ``"missing"`` in a validator
  (also from James Gardner).

* Added ``validators.CADR`` (for IP addresses with an optional range)
  and ``validators.MACAddress`` (from Christoph Haas).

Bug Fixes
~~~~~~~~~

* Be friendlier when loaded from a zip file (as with py2exe);
  previously only egg zip files would work.

* Fixed bug in htmlfill when a document ends with no trailing text
  after the last tag.

* Fix problem with HTMLParser's default unescaping routing, which only
  understood a very limited number of entities in attribute values.

* Fix problem with looking up A records for email addresses.

* ``validators.String`` now always returns strings.  It also converts
  lists to comma-separated strings (no ``[...]``), and can encode
  unicode if an ``encoding`` parameter is given.  Empty values are
  handled better.

* ``validators.UnicodeString`` properly handles non-Unicode inputs.

* Make ``validators.DateConverter`` serialize dates properly
  (from James Gardner).

* Minor fix to setup.py to make FormEncode more friendly with
  zc.buildout.

0.7.1
-----

* Set ``if_missing=()`` on ``validators.Set``, as a missing value
  usually means empty for this value.

* Fix for ``Email`` validator that searches A records in addition to
  MX records (from Jacob Smullyan).

* Fixes for the ``es`` locale.

0.7
---

* **Backward compatibility issue**: Due to the addition of i18n
  (internationalization) to FormEncode, Invalid exceptions now have
  unicode messages.  You may encounter unicode-related errors if you
  are mixing these messages with non-ASCII ``str`` strings.

* gettext-enabled branch merged in

* Fixes `#1457145: Fails on URLs with port numbers
  <http://sourceforge.net/tracker/index.php?func=detail&aid=1457145&group_id=91231&atid=596416>`_

* Fixes `#1559918 Schema fails to accept unicode errors
  <http://sourceforge.net/tracker/index.php?func=detail&aid=1559918&group_id=91231&atid=596416>`_

* ``from formencode.validators import *`` will import the ``Invalid``
  exception now.

* ``Invalid().unpack_errors(encode_variables=True)`` now filters out
  None values (which ``ForEach`` can produce even for keys with no
  errors).

0.6
---

* ``String(min=1)`` implies ``not_empty`` (which seems more intuitive)

* Added ``list_char`` and ``dict_char`` arguments to
  ``Invalid.unpack_errors`` (passed through to ``variable_encode``)

* Added a ``use_datetime`` option to ``TimeValidator``, which will
  cause it to use ``datetime.time`` objects instead of tuples.  It was
  previously able to consume but not produce these objects.

* Added ``<form:iferror name="not field_name">`` when you want to
  include text only when a field has no errors.

* There was a problem installing 0.5.1 on Windows with Python 2.5, now
  resolved.

0.5.1
-----

* Fixed compound validators and ``not_empty`` (was breaking
  SQLObject's PickleCol)

0.5
---

* Added ``htmlfill.default_formatter_dict``, and you can poke new
  formatters in there to effective register them.

* Added an ``escapenl`` formatter (nl=newline) that escapes HTML and
  turns newlines into ``<br>``.

* When ``not_empty=False``, empty is assumed to be allowed.  Thus
  ``Int().to_python(None)`` will now return ``None``.

0.4
---

* Fixed up all the documentation.

* Validator ``__doc__`` attributes will include some
  automatically-appended information about all the message strings
  that validator uses.

* Deprecated ``formencode.htmlform`` module, because it is dumb.

* Added an ``.all_messages()`` method to all validators, primarily
  intended to be used for documentation purposes.

* Changed preferred name of ``StringBoolean`` to ``StringBool`` (to go
  with ``bool`` and ``validators.Bool``).  Old alias still available.

* Added ``today_or_after`` option to ``validators.DateValidator``.

* Added a ``validators.FileUploadKeeper`` validator for helping with
  file uploads in failed forms.  It still requires some annoying
  fiddling to make work, though, since file upload fields are so
  weird.

* Added ``text_as_default`` option to htmlfill.  This treats all
  ``<input type="something-weird">`` elements as text fields.  WHAT-WG
  adds weird input types, which can usually be usefully treated as
  text fields.

* Make all validators accept empty values if ``not_empty`` is False
  (the default).  "Empty" means ``""`` or ``None``, and will generally
  be converted None.

* Added ``accept_python`` boolean to all ``FancyValidator`` validators
  (which is most validators).  This is a fixed version of the broken
  ``validate_python`` boolean added in 0.3.  Also, it defaults to
  true, which means that all validators will not validate during
  ``.from_python()`` calls by default.

* Added ``htmlfill.render(form, defaults, errors)`` for easier
  rendering of forms.

* Errors automatically inserted by ``htmlfill`` will go at the top of
  the form if there's no field associated with the error (raised an
  error in 0.3).

* Added ``formencode.sqlschema`` for wrapping SQLObject
  classes/instances.  See the docstring for more.

* Added ``ignore_key_missing`` to ``Schema`` objects, which ignore
  missing keys (where fields are present) when no ``if_missing`` is
  provided for the field.

* Renamed ``validators.StateProvince.extraStates`` to
  ``extra_states``, to normalize style.

Bugfixes
~~~~~~~~

* When checking destinations, ``validators.URL`` now allows redirect
  codes, and catches socket errors and turns them into proper errors.

* Fix typo in ``htmlfill``

* Made URL and email regular expressions a little more lax/correct.

* A bunch of fixes to ``validators.SignedString``, which apparently
  was completely broken.

0.3
-----

* Allow errors to be inserted automatically into a form when using
  ``formencode.htmlfill``, when a ``<form:error>`` tag isn't found for
  an error.

* Added ``if_key_missing`` attribute to ``schema.Schema``, which will
  fill in any keys that are missing and pass them to the validator.

* ``FancyValidator`` has changed, adding ``if_invalid_python`` and
  ``validate_python`` options (which also apply to all subclasses).
  Also ``if_empty`` only applies to ``to_python`` conversions.

* ``FancyValidator`` now has a ``strip`` option, which if true and if
  input is a string, will strip whitespace from the string.

* Allow chained validators to validate otherwise-invalid forms, if
  they define a ``validate_partial`` method.  The credit card
  validator does this.

* Handle ``FieldStorage`` input (from file uploads); added a
  ``formencode.fieldstorage`` module to wrap those instances in
  something a bit nicer.  Added
  ``validators.FieldStorageUploadConverter`` to make this conversion.

* Added ``StringBoolean`` converter, which converts strings like
  ``"true"`` to Python booleans.

Bugfixes
~~~~~~~~

* A couple fixes to ``DateConverter``, ``FieldsMatch``,
  ``StringBoolean``, ``CreditCardValidator``.

* Added missing ``Validator.assert_string`` method.

* ``formencode.htmlfill_schemabuilder`` handles checkboxes better.

* Be a little more careful about how ``Invalid`` exceptions are
  created (catch some errors sooner).

* Improved handling of non-string input in ``htmlfill``.

Experiments
~~~~~~~~~~~

* Some experimental work in ``formencode.formgen``.  Experimental, I
  say!

* Added an experimental ``formencode.context`` module for
  dynamically-scoped variables.
