diff --git a/AUTHORS b/AUTHORS index 326caec6..77115407 100644 --- a/AUTHORS +++ b/AUTHORS @@ -207,3 +207,4 @@ that much better: * Bruno Rocha (https://github.com/rochacbruno) * Norberto Leite (https://github.com/nleite) * Bob Cribbs (https://github.com/bocribbz) + * Jay Shirley (https://github.com/jshirley) diff --git a/docs/changelog.rst b/docs/changelog.rst index 3008996d..51f7975c 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -46,6 +46,7 @@ Changes in 0.9.X - DEV - Workaround a dateutil bug #608 - Conditional save for atomic-style operations #511 - Allow dynamic dictionary-style field access #559 +- Increase email field length to accommodate new TLDs #726 - index_cls is ignored when deciding to set _cls as index prefix #733 - Allow atomic update for the entire `DictField` #742 diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 8b3cf4c7..e2a6dd1d 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -160,8 +160,8 @@ class EmailField(StringField): r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # quoted-string r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' - # domain - r')@(?:[A-Z0-9](?:[A-Z0-9-]{0,253}[A-Z0-9])?\.)+[A-Z]{2,6}$', re.IGNORECASE + # domain (max length of an ICAAN TLD is 22 characters) + r')@(?:[A-Z0-9](?:[A-Z0-9-]{0,253}[A-Z0-9])?\.)+[A-Z]{2,22}$', re.IGNORECASE ) def validate(self, value): diff --git a/tests/fields/fields.py b/tests/fields/fields.py index 7d906917..1415fbe8 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -2927,6 +2927,9 @@ class FieldTest(unittest.TestCase): "aJIazqqWkm7.net")) self.assertTrue(user.validate() is None) + user = User(email="new-tld@example.technology") + self.assertTrue(user.validate() is None) + user = User(email='me@localhost') self.assertRaises(ValidationError, user.validate)