Implemented masked_email.
authorphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Tue, 2 Feb 2016 21:09:18 +0000 (21:09 +0000)
committerphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Tue, 2 Feb 2016 21:09:18 +0000 (21:09 +0000)
git-svn-id: http://www.winterrodeln.org/svn/wrpylib/trunk@2434 7aebc617-e5e2-0310-91dc-80fb5f6d2477

tests/test_wrvalidators.py
wrpylib/wrvalidators.py

index 48836764fbeb87d31ed42699548b9f71bbe131db..e678709eb199b4fed2fbaef86f523037ff107488 100644 (file)
@@ -394,6 +394,21 @@ class TestEmail(unittest.TestCase):
             self.assertEqual(value, email_to_str(value))
 
 
+class TestMaskedEmail(unittest.TestCase):
+    def test_from_str(self):
+        self.assertEqual(('office@example.com', False), masked_email_from_str('office@example.com'))
+        self.assertEqual(('office@example.com', True), masked_email_from_str('office(at)example.com'))
+        with self.assertRaises(ValueError):
+            masked_email_from_str('office@example.com', masked_only=True)
+        with self.assertRaises(ValueError):
+            masked_email_from_str('off ice@example.com')
+
+    def test_to_str(self):
+        self.assertEqual('office@example.com', masked_email_to_str(('office@example.com', False)))
+        self.assertEqual('office(at)example.com', masked_email_to_str(('office@example.com', True)))
+        self.assertEqual('office()example.com', masked_email_to_str(('office@example.com', True), '()'))
+
+
 class TestBox(unittest.TestCase):
     def test_from_str(self):
         value = '{{MyTemplate|apple=2|banana=5}}'
index 8d04b76e5f38cc86f8fd31e7b463a5f2d42adb82..14509f55d3b27250857dcf59c143f167fe1df52f 100644 (file)
@@ -610,6 +610,25 @@ def email_to_str(value):
     return str(value)
 
 
+def masked_email_from_str(value, mask='(at)', masked_only=False):
+    """Converts an email address that is possibly masked. Returns a tuple. The first parameter is the un-masked
+    email address as string, the second is a boolean telling whether the address was masked."""
+    unmasked = value.replace(mask, '@')
+    was_masked = unmasked != value
+    if masked_only and not was_masked:
+        raise ValueError('E-Mail address not masked')
+    return email_from_str(unmasked), was_masked
+
+
+def masked_email_to_str(value, mask='(at)'):
+    """Value is a tuple. The first entry is the email address, the second one is a boolean telling whether the
+    email address should be masked."""
+    email, do_masking = value
+    email = email_to_str(email)
+    if do_masking:
+        email = email.replace('@', mask)
+    return email
+