Mark Sapiro pushed to branch master at GNU Mailman / Mailman Core


Commits:
7c0c47a6 by Mark Sapiro at 2022-01-20T17:11:27-08:00
Extend fix for JSON encoded booleans to REST validator.

- - - - -
9d72e46a by Mark Sapiro at 2022-01-21T03:58:22+00:00
Merge branch 'bool' into 'master'

Extend fix for JSON encoded booleans to REST validator.

See merge request mailman/mailman!950
- - - - -


2 changed files:

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


Changes:

=====================================
src/mailman/rest/tests/test_validator.py
=====================================
@@ -27,7 +27,7 @@ from mailman.interfaces.action import Action
 from mailman.interfaces.usermanager import IUserManager
 from mailman.rest import helpers
 from mailman.rest.validator import (
-    email_or_regexp_validator, email_validator, enum_validator,
+    Validator, email_or_regexp_validator, email_validator, enum_validator,
     integer_ge_zero_validator, list_of_emails_validator,
     list_of_strings_validator, subscriber_validator)
 from mailman.testing.layers import RESTLayer
@@ -147,6 +147,20 @@ class TestValidators(unittest.TestCase):
                           email_validator, 'foo.example.com')
         self.assertEqual('f...@example.com', 
email_validator('f...@example.com'))
 
+    def test_validator_class_boolean_as_bool(self):
+
+        class RequestTrue:
+            params = dict(key=True)
+            content_type = 'application/x-www-form-urlencoded'
+
+        class RequestFalse:
+            params = dict(key=False)
+            content_type = 'application/x-www-form-urlencoded'
+
+        validator = Validator(key=as_boolean)
+        self.assertTrue(validator(RequestTrue)['key'])
+        self.assertFalse(validator(RequestFalse)['key'])
+
 
 class TestGetterSetter(unittest.TestCase):
     """Test the GeterSetter class"""


=====================================
src/mailman/rest/validator.py
=====================================
@@ -19,6 +19,7 @@
 
 import re
 
+from lazr.config import as_boolean
 from mailman.interfaces.address import IEmailValidator
 from mailman.interfaces.errors import MailmanError
 from mailman.interfaces.languages import ILanguageManager
@@ -224,7 +225,11 @@ class Validator:
         # Now do all the conversions.
         for key, value in form_data.items():
             try:
-                values[key] = self._converters[key](value)
+                if (self._converters[key] is as_boolean and
+                        isinstance(value, bool)):
+                    values[key] = value
+                else:
+                    values[key] = self._converters[key](value)
             except KeyError:
                 extras.add(key)
             except (TypeError, ValueError) as e:



View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/37b769136c96d457b36d5bf9dd6c433b22bddb14...9d72e46aca1596481e4dec1eec3615469a445034

-- 
View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/37b769136c96d457b36d5bf9dd6c433b22bddb14...9d72e46aca1596481e4dec1eec3615469a445034
You're receiving this email because of your account on gitlab.com.


_______________________________________________
Mailman-checkins mailing list -- mailman-checkins@python.org
To unsubscribe send an email to mailman-checkins-le...@python.org
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: arch...@jab.org

Reply via email to