Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time
416 lines (284 sloc) 13.4 KB
What's New In FormEncode 0 to 1.2.4
.. contents::
* Fix packaging issue with i18n files (from Juliusz Gonera)
* Code repository moved to BitBucket at `ianb/formencode
* Allowed :class:`formencode.validators.UnicodeString` to use different
encoding of input and output, or no encoding/decoding at all.
* Fixes `#2666139 <>`_:
DateValidator bug happening only in March under Windows in Germany :)
* Don't let :class:`formencode.compound.Any` shortcut validation when
it gets an empty value (this same change had already been made to
* Really updated German translation
* Fixes `#2799713 <>`_:
force_defaults=False and <select> fields, regarding :func:`formencode.htmlfill.render`.
Thanks to w31rd0 for the bug report and patch to fix it.
* 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
* 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.
* 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
* 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
* Fixed the ``is_empty()`` method in
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/
* ``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
* 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.
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.
* 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
* 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
* 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 to make FormEncode more friendly with
* 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.
* **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
* Fixes `#1559918 Schema fails to accept unicode errors
* ``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
* ``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
* Fixed compound validators and ``not_empty`` (was breaking
SQLObject's PickleCol)
* 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``.
* 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
* 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.
* 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.
* 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.
* 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``.
* Some experimental work in ``formencode.formgen``. Experimental, I
* Added an experimental ``formencode.context`` module for
dynamically-scoped variables.