Abhilash Raj pushed to branch master at GNU Mailman / Mailman Core

Commits:
afbb4557 by Abhilash Raj at 2018-05-25T03:15:58Z
Add a list-of-emails validator.

- - - - -
73a2d2b9 by Abhilash Raj at 2018-05-25T08:08:37Z
Merge branch 'list-of-emails' into 'master'

Add a list-of-emails validator.

See merge request mailman/mailman!394
- - - - -


2 changed files:

- src/mailman/rest/tests/test_validator.py
- src/mailman/rest/validator.py


Changes:

=====================================
src/mailman/rest/tests/test_validator.py
=====================================
--- a/src/mailman/rest/tests/test_validator.py
+++ b/src/mailman/rest/tests/test_validator.py
@@ -23,8 +23,8 @@ from mailman.core.api import API30, API31
 from mailman.interfaces.action import Action
 from mailman.interfaces.usermanager import IUserManager
 from mailman.rest.validator import (
-    enum_validator, integer_ge_zero_validator, list_of_strings_validator,
-    subscriber_validator)
+    enum_validator, integer_ge_zero_validator, list_of_emails_validator,
+    list_of_strings_validator, subscriber_validator)
 from mailman.testing.layers import RESTLayer
 from zope.component import getUtility
 
@@ -100,3 +100,19 @@ class TestValidators(unittest.TestCase):
 
     def test_enum_validator_blank(self):
         self.assertEqual(enum_validator(Action, allow_blank=True)(''), None)
+
+    def test_list_of_emails_validator_valid(self):
+        self.assertEqual(
+            list_of_emails_validator(['f...@example.com', 'b...@example.com']),
+            ['f...@example.com', 'b...@example.com'])
+        self.assertEqual(
+            list_of_emails_validator('b...@example.com'),
+            ['b...@example.com'])
+
+    def test_list_of_emails_validator_invalid(self):
+        self.assertRaises(
+            ValueError, list_of_emails_validator, 'foo.example.com')
+        self.assertRaises(
+            ValueError,
+            list_of_emails_validator,
+            ['f...@example.com', 'bar.example.com'])


=====================================
src/mailman/rest/validator.py
=====================================
--- a/src/mailman/rest/validator.py
+++ b/src/mailman/rest/validator.py
@@ -102,6 +102,19 @@ def list_of_strings_validator(values):
 
 
 @public
+def list_of_emails_validator(values):
+    """Turn a list of things, or a single thing, into a list of emails."""
+    if not isinstance(values, (list, tuple)):
+        if getUtility(IEmailValidator).is_valid(values):
+            return [values]
+        raise ValueError('Bad email address format: {}'.format(values))
+    for value in values:
+        if not getUtility(IEmailValidator).is_valid(value):
+            raise ValueError('Expected email address, got {!r}'.format(value))
+    return values
+
+
+@public
 def integer_ge_zero_validator(value):
     """Validate that the value is a non-negative integer."""
     value = int(value)



View it on GitLab: 
https://gitlab.com/mailman/mailman/compare/2e530b257a864bb557f317ecc40a0a16f3180c02...73a2d2b9979e23f8bc53bb1f0601c39125ca27db

-- 
View it on GitLab: 
https://gitlab.com/mailman/mailman/compare/2e530b257a864bb557f317ecc40a0a16f3180c02...73a2d2b9979e23f8bc53bb1f0601c39125ca27db
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list
Mailman-checkins@python.org
Unsubscribe: 
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org

Reply via email to