What’s New In FormEncode 0 to 1.2.4


  • Fix packaging issue with i18n files (from Juliusz Gonera)



  • Added keyword argument force_defaults to 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 formencode.national zip code validators.
  • In formencode.national only warn about the pycountry or TG requirement when creating validators that require them.
  • Fix another formencode.htmlfill error due to a field with no explicit value.


  • Added formencode.validators.IPAddress, validating IP addresses, from Leandro Lucarella.
  • Added formencode.api.Invalid.__unicode__()
  • In 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 formencode.validators.Email allow single-character domain names (like x.com).
  • Make 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).
  • 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 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.
  • formencode.compound.All does not handle empty values, instead relying on sub-validators to check for emptiness.
  • Fixed the if_missing attribute in 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 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 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 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 through).


  • 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 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.


  • 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 errors).


  • 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.


  • 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 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.


  • 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 say!
  • Added an experimental formencode.context module for dynamically-scoped variables.

Project Versions

Table Of Contents

Previous topic

What’s New In FormEncode 1.2

Next topic

FormEncode Validation

This Page