diff --git a/CHANGES.rst b/CHANGES.rst
index 43c932c..1d64b84 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,3 +1,12 @@
+Unreleased
+==========
+
+- The Email validator has been updated to use the same regular expression that
+  is used by the WhatWG HTML specification, thereby increasing the email
+  addresses that will validate correctly from web forms submitted. See
+  https://github.com/Pylons/colander/pull/324 and
+  https://github.com/Pylons/colander/issues/283
+
 1.6.0 (2019-01-31)
 ==================
 
diff --git a/colander/__init__.py b/colander/__init__.py
index 8bddfd6..8956997 100644
--- a/colander/__init__.py
+++ b/colander/__init__.py
@@ -377,19 +377,17 @@ class Regex(object):
             raise Invalid(node, self.msg)
 
 
-EMAIL_RE = r"""(?ix) # matches case insensitive with spaces and comments
-                     # ignored for the entire expression
-^ # matches the start of string
-[A-Z0-9._!#$%&'*+\-/=?^_`{|}~()]+ # matches multiples of the characters:
-                                # A-Z0-9._!#$%&'*+-/=?^_`{|}~() one or
-                                # more times
-@ # matches the @ sign
-[A-Z0-9]+ # matches multiples of the characters A-Z0-9
-([.-][A-Z0-9]+)* # matches one of . or - followed by at least one of A-Z0-9,
-                 # zero to unlimited times
-\.[A-Z]{2,22} # matches a period, followed by two to twenty-two of A-Z
-$ # matches the end of the string
-"""
+# Regex for email addresses.
+#
+# Stolen from the WhatWG HTML spec:
+# https://html.spec.whatwg.org/multipage/input.html#e-mail-state-(type=email)
+#
+# If it is good enough for browsers, it is good enough for us!
+EMAIL_RE = (
+    r"^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9]"
+    r"(?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9]"
+    r"(?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"
+)
 
 
 class Email(Regex):

diff --git a/colander/tests/test_colander.py b/colander/tests/test_colander.py
index 12b904e..a6b85c2 100644
--- a/colander/tests/test_colander.py
+++ b/colander/tests/test_colander.py
@@ -480,6 +480,7 @@ class TestEmail(unittest.TestCase):
         self.assertEqual(validator(None, 'name@here1.info'), None)
         self.assertEqual(validator(None, 'foo@bar.baz.biz'), None)
         self.assertEqual(validator(None, "tip'oneill@house.gov"), None)
+        self.assertEqual(validator(None, "lorem@i--ipsum.com"), None)
 
     def test_empty_email(self):
         validator = self._makeOne()
@@ -491,9 +492,6 @@ class TestEmail(unittest.TestCase):
         from colander import Invalid
 
         self.assertRaises(Invalid, validator, None, 'me@here.')
-        self.assertRaises(
-            Invalid, validator, None, 'name@here.tldiswaytoolooooooooong'
-        )
         self.assertRaises(Invalid, validator, None, '@here.us')
         self.assertRaises(Invalid, validator, None, 'me@here..com')
         self.assertRaises(Invalid, validator, None, 'me@we-here-.com')

Email validator does not allow double hyphen
`lorem@i--ipsum.com` is a valid email address but the current email validator doesn't validate it.

Here's an email validator that I wrote with code that I stole from Django which works:
```python

class Email(object):
    """
    Email validator shamelessly stolen from Django
    """
    USER_REGEX = (
        r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*\Z"  # dot-atom
        r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"\Z)'  # quoted-string
    )
    # max length for domain name labels is 63 characters per RFC 1034
    DOMAIN_REGEX = r'((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+)(?:[A-Z0-9-]{2,63}(?<!-))\Z'

    def __init__(self, msg=None):
        if msg is None:
            msg = "Invalid email address"
        self.msg = msg
        self.user_regex = re.compile(self.USER_REGEX, re.IGNORECASE)
        self.domain_regex = re.compile(self.DOMAIN_REGEX, re.IGNORECASE)

    def __call__(self, node, value):
        if not value or '@' not in value:
            raise Invalid(node, self.msg)

        user_part, domain_part = value.rsplit('@', 1)

        if not self.user_regex.match(user_part):
            raise Invalid(node, self.msg)

        if not self.domain_regex.match(domain_part):
            # Try for possible IDN domain-part
            try:
                domain_part = domain_part.encode('idna').decode('ascii')
                if self.domain_regex.match(domain_part):
                    return
            except UnicodeError:
                pass
            raise Invalid(node, self.msg)
```
colander/tests/test_colander.py::TestEmail::test_valid_emails
colander/tests/test_colander.py::TestInvalid::test___setitem__fails colander/tests/test_colander.py::TestInvalid::test___setitem__succeeds colander/tests/test_colander.py::TestInvalid::test___str__ colander/tests/test_colander.py::TestInvalid::test__keyname_no_parent colander/tests/test_colander.py::TestInvalid::test__keyname_nonpositional_parent colander/tests/test_colander.py::TestInvalid::test__keyname_positional colander/tests/test_colander.py::TestInvalid::test_add colander/tests/test_colander.py::TestInvalid::test_add_positional colander/tests/test_colander.py::TestInvalid::test_asdict colander/tests/test_colander.py::TestInvalid::test_asdict_with_all_validator colander/tests/test_colander.py::TestInvalid::test_asdict_with_all_validator_functional colander/tests/test_colander.py::TestInvalid::test_ctor colander/tests/test_colander.py::TestInvalid::test_messages_msg_None colander/tests/test_colander.py::TestInvalid::test_messages_msg_iterable colander/tests/test_colander.py::TestInvalid::test_messages_msg_not_iterable colander/tests/test_colander.py::TestInvalid::test_paths colander/tests/test_colander.py::TestAll::test_Invalid_children colander/tests/test_colander.py::TestAll::test_failure colander/tests/test_colander.py::TestAll::test_success colander/tests/test_colander.py::TestAny::test_Invalid_children colander/tests/test_colander.py::TestAny::test_failure colander/tests/test_colander.py::TestAny::test_success colander/tests/test_colander.py::TestFunction::test_deprecated_message colander/tests/test_colander.py::TestFunction::test_deprecated_message_warning colander/tests/test_colander.py::TestFunction::test_error_message_adds_mapping_to_configured_message colander/tests/test_colander.py::TestFunction::test_error_message_adds_mapping_to_return_message colander/tests/test_colander.py::TestFunction::test_error_message_does_not_overwrite_configured_domain colander/tests/test_colander.py::TestFunction::test_error_message_does_not_overwrite_returned_domain colander/tests/test_colander.py::TestFunction::test_fail_function_returns_False colander/tests/test_colander.py::TestFunction::test_fail_function_returns_empty_string colander/tests/test_colander.py::TestFunction::test_fail_function_returns_string colander/tests/test_colander.py::TestFunction::test_msg_and_message_error colander/tests/test_colander.py::TestFunction::test_propagation colander/tests/test_colander.py::TestFunction::test_success_function_returns_True colander/tests/test_colander.py::TestRange::test_max_failure colander/tests/test_colander.py::TestRange::test_max_failure_msg_override colander/tests/test_colander.py::TestRange::test_min_failure colander/tests/test_colander.py::TestRange::test_min_failure_msg_override colander/tests/test_colander.py::TestRange::test_success_min_and_max colander/tests/test_colander.py::TestRange::test_success_minimum_bound_only colander/tests/test_colander.py::TestRange::test_success_no_bounds colander/tests/test_colander.py::TestRange::test_success_upper_bound_only colander/tests/test_colander.py::TestRegex::test_invalid_regexs colander/tests/test_colander.py::TestRegex::test_regex_not_string colander/tests/test_colander.py::TestRegex::test_valid_regex colander/tests/test_colander.py::TestEmail::test_empty_email colander/tests/test_colander.py::TestEmail::test_invalid_emails colander/tests/test_colander.py::TestLength::test_max_failure colander/tests/test_colander.py::TestLength::test_max_failure_msg_override colander/tests/test_colander.py::TestLength::test_min_failure colander/tests/test_colander.py::TestLength::test_min_failure_msg_override colander/tests/test_colander.py::TestLength::test_success_min_and_max colander/tests/test_colander.py::TestLength::test_success_minimum_bound_only colander/tests/test_colander.py::TestLength::test_success_no_bounds colander/tests/test_colander.py::TestLength::test_success_upper_bound_only colander/tests/test_colander.py::TestOneOf::test_failure colander/tests/test_colander.py::TestOneOf::test_success colander/tests/test_colander.py::TestNoneOf::test_failure colander/tests/test_colander.py::TestNoneOf::test_success colander/tests/test_colander.py::TestContainsOnly::test_failure colander/tests/test_colander.py::TestContainsOnly::test_failure_with_custom_error_template colander/tests/test_colander.py::TestContainsOnly::test_success colander/tests/test_colander.py::Test_luhnok::test_fail colander/tests/test_colander.py::Test_luhnok::test_fail2 colander/tests/test_colander.py::Test_luhnok::test_fail3 colander/tests/test_colander.py::Test_luhnok::test_success colander/tests/test_colander.py::Test_url_validator::test_it_failure colander/tests/test_colander.py::Test_url_validator::test_it_success colander/tests/test_colander.py::TestUUID::test_failure_invalid_length colander/tests/test_colander.py::TestUUID::test_failure_not_hexadecimal colander/tests/test_colander.py::TestUUID::test_failure_random_string colander/tests/test_colander.py::TestUUID::test_failure_with_invalid_urn_ns colander/tests/test_colander.py::TestUUID::test_success_hexadecimal colander/tests/test_colander.py::TestUUID::test_success_upper_case colander/tests/test_colander.py::TestUUID::test_success_with_braces colander/tests/test_colander.py::TestUUID::test_success_with_dashes colander/tests/test_colander.py::TestUUID::test_success_with_urn_ns colander/tests/test_colander.py::TestSchemaType::test_cstruct_children colander/tests/test_colander.py::TestSchemaType::test_flatten colander/tests/test_colander.py::TestSchemaType::test_flatten_listitem colander/tests/test_colander.py::TestSchemaType::test_get_value colander/tests/test_colander.py::TestSchemaType::test_set_value colander/tests/test_colander.py::TestSchemaType::test_unflatten colander/tests/test_colander.py::TestMapping::test_cstruct_children colander/tests/test_colander.py::TestMapping::test_cstruct_children_cstruct_is_null colander/tests/test_colander.py::TestMapping::test_ctor_bad_unknown colander/tests/test_colander.py::TestMapping::test_ctor_good_unknown colander/tests/test_colander.py::TestMapping::test_deserialize_no_subnodes colander/tests/test_colander.py::TestMapping::test_deserialize_not_a_mapping colander/tests/test_colander.py::TestMapping::test_deserialize_null colander/tests/test_colander.py::TestMapping::test_deserialize_ok colander/tests/test_colander.py::TestMapping::test_deserialize_subnode_missing_default colander/tests/test_colander.py::TestMapping::test_deserialize_subnodes_raise colander/tests/test_colander.py::TestMapping::test_deserialize_unknown_preserve colander/tests/test_colander.py::TestMapping::test_deserialize_unknown_raise colander/tests/test_colander.py::TestMapping::test_flatten colander/tests/test_colander.py::TestMapping::test_flatten_listitem colander/tests/test_colander.py::TestMapping::test_get_value colander/tests/test_colander.py::TestMapping::test_serialize_no_subnodes colander/tests/test_colander.py::TestMapping::test_serialize_not_a_mapping colander/tests/test_colander.py::TestMapping::test_serialize_null colander/tests/test_colander.py::TestMapping::test_serialize_ok colander/tests/test_colander.py::TestMapping::test_serialize_value_has_drop colander/tests/test_colander.py::TestMapping::test_serialize_value_is_null colander/tests/test_colander.py::TestMapping::test_serialize_with_unknown colander/tests/test_colander.py::TestMapping::test_set_value colander/tests/test_colander.py::TestMapping::test_unflatten colander/tests/test_colander.py::TestMapping::test_unflatten_nested colander/tests/test_colander.py::TestTuple::test_cstruct_children_cstruct_is_null colander/tests/test_colander.py::TestTuple::test_cstruct_children_justright colander/tests/test_colander.py::TestTuple::test_cstruct_children_toofew colander/tests/test_colander.py::TestTuple::test_cstruct_children_toomany colander/tests/test_colander.py::TestTuple::test_deserialize_no_subnodes colander/tests/test_colander.py::TestTuple::test_deserialize_not_iterable colander/tests/test_colander.py::TestTuple::test_deserialize_null colander/tests/test_colander.py::TestTuple::test_deserialize_ok colander/tests/test_colander.py::TestTuple::test_deserialize_subnodes_raise colander/tests/test_colander.py::TestTuple::test_deserialize_toobig colander/tests/test_colander.py::TestTuple::test_deserialize_toosmall colander/tests/test_colander.py::TestTuple::test_flatten colander/tests/test_colander.py::TestTuple::test_flatten_listitem colander/tests/test_colander.py::TestTuple::test_get_value colander/tests/test_colander.py::TestTuple::test_get_value_bad_path colander/tests/test_colander.py::TestTuple::test_serialize_no_subnodes colander/tests/test_colander.py::TestTuple::test_serialize_not_iterable colander/tests/test_colander.py::TestTuple::test_serialize_null colander/tests/test_colander.py::TestTuple::test_serialize_ok colander/tests/test_colander.py::TestTuple::test_serialize_subnodes_raise colander/tests/test_colander.py::TestTuple::test_serialize_toobig colander/tests/test_colander.py::TestTuple::test_serialize_toosmall colander/tests/test_colander.py::TestTuple::test_set_value colander/tests/test_colander.py::TestTuple::test_set_value_bad_path colander/tests/test_colander.py::TestTuple::test_unflatten colander/tests/test_colander.py::TestSet::test_deserialize_empty_set colander/tests/test_colander.py::TestSet::test_deserialize_no_iter colander/tests/test_colander.py::TestSet::test_deserialize_null colander/tests/test_colander.py::TestSet::test_deserialize_str_no_iter colander/tests/test_colander.py::TestSet::test_deserialize_valid colander/tests/test_colander.py::TestSet::test_serialize colander/tests/test_colander.py::TestSet::test_serialize_null colander/tests/test_colander.py::TestList::test_deserialize_empty_set colander/tests/test_colander.py::TestList::test_deserialize_no_iter colander/tests/test_colander.py::TestList::test_deserialize_null colander/tests/test_colander.py::TestList::test_deserialize_str_no_iter colander/tests/test_colander.py::TestList::test_deserialize_valid colander/tests/test_colander.py::TestList::test_serialize colander/tests/test_colander.py::TestList::test_serialize_null colander/tests/test_colander.py::TestSequence::test_alias colander/tests/test_colander.py::TestSequence::test_cstruct_children_cstruct_is_non_null colander/tests/test_colander.py::TestSequence::test_cstruct_children_cstruct_is_null colander/tests/test_colander.py::TestSequence::test_deserialize_no_null colander/tests/test_colander.py::TestSequence::test_deserialize_no_subnodes colander/tests/test_colander.py::TestSequence::test_deserialize_not_iterable colander/tests/test_colander.py::TestSequence::test_deserialize_not_iterable_accept_scalar colander/tests/test_colander.py::TestSequence::test_deserialize_ok colander/tests/test_colander.py::TestSequence::test_deserialize_string_accept_scalar colander/tests/test_colander.py::TestSequence::test_deserialize_subnodes_raise colander/tests/test_colander.py::TestSequence::test_flatten colander/tests/test_colander.py::TestSequence::test_flatten_listitem colander/tests/test_colander.py::TestSequence::test_flatten_with_integer colander/tests/test_colander.py::TestSequence::test_getvalue colander/tests/test_colander.py::TestSequence::test_serialize_drop colander/tests/test_colander.py::TestSequence::test_serialize_no_subnodes colander/tests/test_colander.py::TestSequence::test_serialize_not_iterable colander/tests/test_colander.py::TestSequence::test_serialize_not_iterable_accept_scalar colander/tests/test_colander.py::TestSequence::test_serialize_null colander/tests/test_colander.py::TestSequence::test_serialize_ok colander/tests/test_colander.py::TestSequence::test_serialize_string_accept_scalar colander/tests/test_colander.py::TestSequence::test_serialize_subnodes_raise colander/tests/test_colander.py::TestSequence::test_setvalue colander/tests/test_colander.py::TestSequence::test_unflatten colander/tests/test_colander.py::TestString::test_alias colander/tests/test_colander.py::TestString::test_deserialize_emptystring colander/tests/test_colander.py::TestString::test_deserialize_from_nonstring_obj colander/tests/test_colander.py::TestString::test_deserialize_from_utf16 colander/tests/test_colander.py::TestString::test_deserialize_from_utf8 colander/tests/test_colander.py::TestString::test_deserialize_nonunicode_from_None colander/tests/test_colander.py::TestString::test_deserialize_uncooperative colander/tests/test_colander.py::TestString::test_deserialize_unicode_from_None colander/tests/test_colander.py::TestString::test_serialize_emptystring colander/tests/test_colander.py::TestString::test_serialize_encoding_with_non_string_type colander/tests/test_colander.py::TestString::test_serialize_nonunicode_to_None colander/tests/test_colander.py::TestString::test_serialize_null colander/tests/test_colander.py::TestString::test_serialize_string_with_high_unresolveable_high_order_chars colander/tests/test_colander.py::TestString::test_serialize_to_utf16 colander/tests/test_colander.py::TestString::test_serialize_to_utf8 colander/tests/test_colander.py::TestString::test_serialize_uncooperative colander/tests/test_colander.py::TestString::test_serialize_unicode_to_None colander/tests/test_colander.py::TestInteger::test_alias colander/tests/test_colander.py::TestInteger::test_deserialize_emptystring colander/tests/test_colander.py::TestInteger::test_deserialize_fails colander/tests/test_colander.py::TestInteger::test_deserialize_ok colander/tests/test_colander.py::TestInteger::test_serialize_fails colander/tests/test_colander.py::TestInteger::test_serialize_null colander/tests/test_colander.py::TestInteger::test_serialize_ok colander/tests/test_colander.py::TestInteger::test_serialize_zero colander/tests/test_colander.py::TestFloat::test_deserialize_fails colander/tests/test_colander.py::TestFloat::test_deserialize_ok colander/tests/test_colander.py::TestFloat::test_serialize_emptystring colander/tests/test_colander.py::TestFloat::test_serialize_fails colander/tests/test_colander.py::TestFloat::test_serialize_null colander/tests/test_colander.py::TestFloat::test_serialize_ok colander/tests/test_colander.py::TestDecimal::test_deserialize_fails colander/tests/test_colander.py::TestDecimal::test_deserialize_ok colander/tests/test_colander.py::TestDecimal::test_deserialize_with_normalize colander/tests/test_colander.py::TestDecimal::test_deserialize_with_quantize colander/tests/test_colander.py::TestDecimal::test_serialize_emptystring colander/tests/test_colander.py::TestDecimal::test_serialize_fails colander/tests/test_colander.py::TestDecimal::test_serialize_normalize colander/tests/test_colander.py::TestDecimal::test_serialize_null colander/tests/test_colander.py::TestDecimal::test_serialize_ok colander/tests/test_colander.py::TestDecimal::test_serialize_quantize_no_rounding colander/tests/test_colander.py::TestDecimal::test_serialize_quantize_with_rounding_up colander/tests/test_colander.py::TestMoney::test_deserialize_rounds_up colander/tests/test_colander.py::TestMoney::test_serialize_rounds_up colander/tests/test_colander.py::TestBoolean::test_alias colander/tests/test_colander.py::TestBoolean::test_deserialize colander/tests/test_colander.py::TestBoolean::test_deserialize_null colander/tests/test_colander.py::TestBoolean::test_deserialize_unstringable colander/tests/test_colander.py::TestBoolean::test_serialize colander/tests/test_colander.py::TestBoolean::test_serialize_null colander/tests/test_colander.py::TestBooleanCustomFalseReprs::test_deserialize colander/tests/test_colander.py::TestBooleanCustomFalseAndTrueReprs::test_deserialize colander/tests/test_colander.py::TestBooleanCustomSerializations::test_serialize colander/tests/test_colander.py::TestGlobalObject::test__pkg_resources_style_irrresolveable_absolute colander/tests/test_colander.py::TestGlobalObject::test__pkg_resources_style_irrresolveable_relative colander/tests/test_colander.py::TestGlobalObject::test__pkg_resources_style_resolve_absolute colander/tests/test_colander.py::TestGlobalObject::test__pkg_resources_style_resolve_relative_is_dot colander/tests/test_colander.py::TestGlobalObject::test__pkg_resources_style_resolve_relative_nocurrentpackage colander/tests/test_colander.py::TestGlobalObject::test__pkg_resources_style_resolve_relative_startswith_colon colander/tests/test_colander.py::TestGlobalObject::test__pkg_resources_style_resolve_relative_startswith_dot colander/tests/test_colander.py::TestGlobalObject::test__zope_dottedname_style_irresolveable_absolute colander/tests/test_colander.py::TestGlobalObject::test__zope_dottedname_style_irresolveable_relative_is_dot colander/tests/test_colander.py::TestGlobalObject::test__zope_dottedname_style_resolve_relative colander/tests/test_colander.py::TestGlobalObject::test__zope_dottedname_style_resolve_relative_is_dot colander/tests/test_colander.py::TestGlobalObject::test__zope_dottedname_style_resolve_relative_leading_dots colander/tests/test_colander.py::TestGlobalObject::test__zope_dottedname_style_resolveable_absolute colander/tests/test_colander.py::TestGlobalObject::test__zope_dottedname_style_resolveable_relative colander/tests/test_colander.py::TestGlobalObject::test_deserialize_None colander/tests/test_colander.py::TestGlobalObject::test_deserialize_class_fail colander/tests/test_colander.py::TestGlobalObject::test_deserialize_class_ok colander/tests/test_colander.py::TestGlobalObject::test_deserialize_notastring colander/tests/test_colander.py::TestGlobalObject::test_deserialize_null colander/tests/test_colander.py::TestGlobalObject::test_deserialize_style_raises colander/tests/test_colander.py::TestGlobalObject::test_deserialize_using_pkgresources_style colander/tests/test_colander.py::TestGlobalObject::test_deserialize_using_zope_dottedname_style colander/tests/test_colander.py::TestGlobalObject::test_serialize_class colander/tests/test_colander.py::TestGlobalObject::test_serialize_fail colander/tests/test_colander.py::TestGlobalObject::test_serialize_null colander/tests/test_colander.py::TestGlobalObject::test_serialize_ok colander/tests/test_colander.py::TestGlobalObject::test_zope_dottedname_style_irrresolveable_absolute colander/tests/test_colander.py::TestGlobalObject::test_zope_dottedname_style_irrresolveable_relative colander/tests/test_colander.py::TestGlobalObject::test_zope_dottedname_style_resolve_absolute colander/tests/test_colander.py::TestGlobalObject::test_zope_dottedname_style_resolve_relative_nocurrentpackage colander/tests/test_colander.py::TestDateTime::test_ctor_default_tzinfo_None colander/tests/test_colander.py::TestDateTime::test_ctor_default_tzinfo_non_None colander/tests/test_colander.py::TestDateTime::test_ctor_default_tzinfo_not_specified colander/tests/test_colander.py::TestDateTime::test_deserialize_date colander/tests/test_colander.py::TestDateTime::test_deserialize_datetime_with_custom_format colander/tests/test_colander.py::TestDateTime::test_deserialize_empty colander/tests/test_colander.py::TestDateTime::test_deserialize_invalid_ParseError colander/tests/test_colander.py::TestDateTime::test_deserialize_naive_with_default_tzinfo colander/tests/test_colander.py::TestDateTime::test_deserialize_none_tzinfo colander/tests/test_colander.py::TestDateTime::test_deserialize_null colander/tests/test_colander.py::TestDateTime::test_deserialize_slashes_invalid colander/tests/test_colander.py::TestDateTime::test_deserialize_success colander/tests/test_colander.py::TestDateTime::test_serialize_none colander/tests/test_colander.py::TestDateTime::test_serialize_null colander/tests/test_colander.py::TestDateTime::test_serialize_with_date colander/tests/test_colander.py::TestDateTime::test_serialize_with_garbage colander/tests/test_colander.py::TestDateTime::test_serialize_with_naive_datetime colander/tests/test_colander.py::TestDateTime::test_serialize_with_naive_datetime_and_custom_format colander/tests/test_colander.py::TestDateTime::test_serialize_with_none_tzinfo_naive_datetime colander/tests/test_colander.py::TestDateTime::test_serialize_with_none_tzinfo_naive_datetime_custom_format colander/tests/test_colander.py::TestDateTime::test_serialize_with_tzware_datetime colander/tests/test_colander.py::TestDate::test_deserialize_date_with_custom_format colander/tests/test_colander.py::TestDate::test_deserialize_empty colander/tests/test_colander.py::TestDate::test_deserialize_invalid_ParseError colander/tests/test_colander.py::TestDate::test_deserialize_invalid_weird colander/tests/test_colander.py::TestDate::test_deserialize_null colander/tests/test_colander.py::TestDate::test_deserialize_success_date colander/tests/test_colander.py::TestDate::test_deserialize_success_datetime colander/tests/test_colander.py::TestDate::test_serialize_date_with_custom_format colander/tests/test_colander.py::TestDate::test_serialize_none colander/tests/test_colander.py::TestDate::test_serialize_null colander/tests/test_colander.py::TestDate::test_serialize_with_date colander/tests/test_colander.py::TestDate::test_serialize_with_datetime colander/tests/test_colander.py::TestDate::test_serialize_with_garbage colander/tests/test_colander.py::TestTime::test_deserialize_empty colander/tests/test_colander.py::TestTime::test_deserialize_four_digit_string colander/tests/test_colander.py::TestTime::test_deserialize_invalid_ParseError colander/tests/test_colander.py::TestTime::test_deserialize_missing_seconds colander/tests/test_colander.py::TestTime::test_deserialize_null colander/tests/test_colander.py::TestTime::test_deserialize_success_datetime colander/tests/test_colander.py::TestTime::test_deserialize_success_time colander/tests/test_colander.py::TestTime::test_deserialize_three_digit_string colander/tests/test_colander.py::TestTime::test_deserialize_two_digit_string colander/tests/test_colander.py::TestTime::test_serialize_none colander/tests/test_colander.py::TestTime::test_serialize_null colander/tests/test_colander.py::TestTime::test_serialize_with_datetime colander/tests/test_colander.py::TestTime::test_serialize_with_garbage colander/tests/test_colander.py::TestTime::test_serialize_with_time colander/tests/test_colander.py::TestTime::test_serialize_with_zero_time colander/tests/test_colander.py::TestEnum::test_deserialize_failure colander/tests/test_colander.py::TestEnum::test_deserialize_failure_typ colander/tests/test_colander.py::TestEnum::test_deserialize_name colander/tests/test_colander.py::TestEnum::test_deserialize_null colander/tests/test_colander.py::TestEnum::test_deserialize_value_int colander/tests/test_colander.py::TestEnum::test_deserialize_value_str colander/tests/test_colander.py::TestEnum::test_non_unique_failure colander/tests/test_colander.py::TestEnum::test_non_unique_failure2 colander/tests/test_colander.py::TestEnum::test_serialize_failure colander/tests/test_colander.py::TestEnum::test_serialize_name colander/tests/test_colander.py::TestEnum::test_serialize_null colander/tests/test_colander.py::TestEnum::test_serialize_value_int colander/tests/test_colander.py::TestEnum::test_serialize_value_str colander/tests/test_colander.py::TestSchemaNode::test___contains__ colander/tests/test_colander.py::TestSchemaNode::test___delitem__failure colander/tests/test_colander.py::TestSchemaNode::test___delitem__success colander/tests/test_colander.py::TestSchemaNode::test___getitem__failure colander/tests/test_colander.py::TestSchemaNode::test___getitem__success colander/tests/test_colander.py::TestSchemaNode::test___iter__ colander/tests/test_colander.py::TestSchemaNode::test___setitem__no_override colander/tests/test_colander.py::TestSchemaNode::test___setitem__override colander/tests/test_colander.py::TestSchemaNode::test_add colander/tests/test_colander.py::TestSchemaNode::test_bind colander/tests/test_colander.py::TestSchemaNode::test_bind_with_after_bind colander/tests/test_colander.py::TestSchemaNode::test_clone colander/tests/test_colander.py::TestSchemaNode::test_clone_mapping_references colander/tests/test_colander.py::TestSchemaNode::test_clone_with_modified_schema_instance colander/tests/test_colander.py::TestSchemaNode::test_cstruct_children colander/tests/test_colander.py::TestSchemaNode::test_cstruct_children_warning colander/tests/test_colander.py::TestSchemaNode::test_ctor_children_kwarg_typ colander/tests/test_colander.py::TestSchemaNode::test_ctor_no_title colander/tests/test_colander.py::TestSchemaNode::test_ctor_with_description colander/tests/test_colander.py::TestSchemaNode::test_ctor_with_kwarg_typ colander/tests/test_colander.py::TestSchemaNode::test_ctor_with_preparer colander/tests/test_colander.py::TestSchemaNode::test_ctor_with_title colander/tests/test_colander.py::TestSchemaNode::test_ctor_with_unknown_kwarg colander/tests/test_colander.py::TestSchemaNode::test_ctor_with_widget colander/tests/test_colander.py::TestSchemaNode::test_ctor_without_preparer colander/tests/test_colander.py::TestSchemaNode::test_ctor_without_type colander/tests/test_colander.py::TestSchemaNode::test_declarative_name_reassignment colander/tests/test_colander.py::TestSchemaNode::test_deserialize_appstruct_deferred colander/tests/test_colander.py::TestSchemaNode::test_deserialize_no_validator colander/tests/test_colander.py::TestSchemaNode::test_deserialize_noargs_uses_default colander/tests/test_colander.py::TestSchemaNode::test_deserialize_null_can_be_used_as_missing colander/tests/test_colander.py::TestSchemaNode::test_deserialize_preparer_before_missing_check colander/tests/test_colander.py::TestSchemaNode::test_deserialize_value_is_null_no_missing colander/tests/test_colander.py::TestSchemaNode::test_deserialize_value_is_null_with_missing colander/tests/test_colander.py::TestSchemaNode::test_deserialize_value_is_null_with_missing_msg colander/tests/test_colander.py::TestSchemaNode::test_deserialize_value_with_interpolated_missing_msg colander/tests/test_colander.py::TestSchemaNode::test_deserialize_with_multiple_preparers colander/tests/test_colander.py::TestSchemaNode::test_deserialize_with_preparer colander/tests/test_colander.py::TestSchemaNode::test_deserialize_with_unbound_validator colander/tests/test_colander.py::TestSchemaNode::test_deserialize_with_validator colander/tests/test_colander.py::TestSchemaNode::test_insert colander/tests/test_colander.py::TestSchemaNode::test_new_sets_order colander/tests/test_colander.py::TestSchemaNode::test_raise_invalid colander/tests/test_colander.py::TestSchemaNode::test_repr colander/tests/test_colander.py::TestSchemaNode::test_required_deferred colander/tests/test_colander.py::TestSchemaNode::test_required_false colander/tests/test_colander.py::TestSchemaNode::test_required_true colander/tests/test_colander.py::TestSchemaNode::test_serialize colander/tests/test_colander.py::TestSchemaNode::test_serialize_default_deferred colander/tests/test_colander.py::TestSchemaNode::test_serialize_noargs_uses_default colander/tests/test_colander.py::TestSchemaNode::test_serialize_value_is_null_no_default colander/tests/test_colander.py::TestSchemaNode::test_serialize_value_is_null_with_default colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_deferred_methods_dont_quite_work_yet colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_functions_can_be_deferred colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_method_values_can_rely_on_binding colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_nodes_can_be_deffered colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_nonmethod_values_can_be_deferred_though colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_nonmethod_values_can_rely_on_after_bind colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_schema_child_names_conflict_with_value_names_in_subclass colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_schema_child_names_conflict_with_value_names_in_superclass colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_schema_child_names_conflict_with_value_names_notused colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_schema_child_names_conflict_with_value_names_used colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_subclass_title_overwritten_by_constructor colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_subclass_uses_missing colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_subclass_uses_title colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_subclass_uses_validator_method colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_subclass_value_overridden_by_constructor colander/tests/test_colander.py::TestSchemaNodeSubclassing::test_subelement_title_not_overwritten colander/tests/test_colander.py::TestMappingSchemaInheritance::test_insert_before_failure colander/tests/test_colander.py::TestMappingSchemaInheritance::test_multiple_inheritance colander/tests/test_colander.py::TestMappingSchemaInheritance::test_single_inheritance colander/tests/test_colander.py::TestMappingSchemaInheritance::test_single_inheritance2 colander/tests/test_colander.py::TestMappingSchemaInheritance::test_single_inheritance_with_insert_before colander/tests/test_colander.py::TestDeferred::test___call__ colander/tests/test_colander.py::TestDeferred::test_ctor colander/tests/test_colander.py::TestDeferred::test_retain_func_details colander/tests/test_colander.py::TestDeferred::test_w_callable_instance_no_name colander/tests/test_colander.py::TestDeferred::test_w_callable_instance_no_name_or_doc colander/tests/test_colander.py::TestSchema::test_alias colander/tests/test_colander.py::TestSchema::test_deserialize_drop colander/tests/test_colander.py::TestSchema::test_imperative_with_implicit_schema_type colander/tests/test_colander.py::TestSchema::test_it colander/tests/test_colander.py::TestSchema::test_schema_with_cloned_nodes colander/tests/test_colander.py::TestSchema::test_serialize_drop_default colander/tests/test_colander.py::TestSchema::test_title_munging colander/tests/test_colander.py::TestSequenceSchema::test_clone_with_sequence_schema colander/tests/test_colander.py::TestSequenceSchema::test_deserialize_drop colander/tests/test_colander.py::TestSequenceSchema::test_fail_toofew colander/tests/test_colander.py::TestSequenceSchema::test_fail_toomany colander/tests/test_colander.py::TestSequenceSchema::test_imperative_with_implicit_schema_type colander/tests/test_colander.py::TestSequenceSchema::test_serialize_drop_default colander/tests/test_colander.py::TestSequenceSchema::test_succeed colander/tests/test_colander.py::TestTupleSchema::test_imperative_with_implicit_schema_type colander/tests/test_colander.py::TestTupleSchema::test_it colander/tests/test_colander.py::TestImperative::test_deserialize_ok colander/tests/test_colander.py::TestImperative::test_flatten_mapping_has_no_name colander/tests/test_colander.py::TestImperative::test_flatten_ok colander/tests/test_colander.py::TestImperative::test_flatten_unflatten_roundtrip colander/tests/test_colander.py::TestImperative::test_get_value colander/tests/test_colander.py::TestImperative::test_invalid_asdict colander/tests/test_colander.py::TestImperative::test_invalid_asdict_translation_callback colander/tests/test_colander.py::TestImperative::test_set_value colander/tests/test_colander.py::TestImperative::test_unflatten_mapping_no_name colander/tests/test_colander.py::TestImperative::test_unflatten_ok colander/tests/test_colander.py::TestDeclarative::test_deserialize_ok colander/tests/test_colander.py::TestDeclarative::test_flatten_mapping_has_no_name colander/tests/test_colander.py::TestDeclarative::test_flatten_ok colander/tests/test_colander.py::TestDeclarative::test_flatten_unflatten_roundtrip colander/tests/test_colander.py::TestDeclarative::test_get_value colander/tests/test_colander.py::TestDeclarative::test_invalid_asdict colander/tests/test_colander.py::TestDeclarative::test_invalid_asdict_translation_callback colander/tests/test_colander.py::TestDeclarative::test_set_value colander/tests/test_colander.py::TestDeclarative::test_unflatten_mapping_no_name colander/tests/test_colander.py::TestDeclarative::test_unflatten_ok colander/tests/test_colander.py::TestUltraDeclarative::test_deserialize_ok colander/tests/test_colander.py::TestUltraDeclarative::test_flatten_mapping_has_no_name colander/tests/test_colander.py::TestUltraDeclarative::test_flatten_ok colander/tests/test_colander.py::TestUltraDeclarative::test_flatten_unflatten_roundtrip colander/tests/test_colander.py::TestUltraDeclarative::test_get_value colander/tests/test_colander.py::TestUltraDeclarative::test_invalid_asdict colander/tests/test_colander.py::TestUltraDeclarative::test_invalid_asdict_translation_callback colander/tests/test_colander.py::TestUltraDeclarative::test_set_value colander/tests/test_colander.py::TestUltraDeclarative::test_unflatten_mapping_no_name colander/tests/test_colander.py::TestUltraDeclarative::test_unflatten_ok colander/tests/test_colander.py::TestDeclarativeWithInstantiate::test_deserialize_ok colander/tests/test_colander.py::TestDeclarativeWithInstantiate::test_flatten_mapping_has_no_name colander/tests/test_colander.py::TestDeclarativeWithInstantiate::test_flatten_ok colander/tests/test_colander.py::TestDeclarativeWithInstantiate::test_flatten_unflatten_roundtrip colander/tests/test_colander.py::TestDeclarativeWithInstantiate::test_get_value colander/tests/test_colander.py::TestDeclarativeWithInstantiate::test_invalid_asdict colander/tests/test_colander.py::TestDeclarativeWithInstantiate::test_invalid_asdict_translation_callback colander/tests/test_colander.py::TestDeclarativeWithInstantiate::test_set_value colander/tests/test_colander.py::TestDeclarativeWithInstantiate::test_unflatten_mapping_no_name colander/tests/test_colander.py::TestDeclarativeWithInstantiate::test_unflatten_ok colander/tests/test_colander.py::Test_null::test___nonzero__ colander/tests/test_colander.py::Test_null::test___repr__ colander/tests/test_colander.py::Test_null::test_pickling colander/tests/test_colander.py::Test_required::test___repr__ colander/tests/test_colander.py::Test_required::test_pickling colander/tests/test_colander.py::Test_drop::test___repr__ colander/tests/test_colander.py::Test_drop::test_pickling