Implemented E-Mail converter.
[philipp/winterrodeln/wrpylib.git] / wrpylib / wrvalidators.py
index 518234556e7af52f8ade0c2b167fdc1a1548a681..f8511de22ea9980d99ddea700e4a2961acf5cd35 100644 (file)
@@ -10,6 +10,7 @@ can assume that the value it has to convert to a string is valid. If it gets an
 undefined.
 """
 import datetime
 undefined.
 """
 import datetime
+import email.headerregistry
 import urllib.parse
 import re
 import xml.dom.minidom as minidom
 import urllib.parse
 import re
 import xml.dom.minidom as minidom
@@ -1041,6 +1042,13 @@ def telefonauskunft_to_str(value):
 telefonauskunft_converter = FromToConverter(telefonauskunft_from_str, telefonauskunft_to_str)
 
 
 telefonauskunft_converter = FromToConverter(telefonauskunft_from_str, telefonauskunft_to_str)
 
 
+def email_from_str(value):
+    """Takes an email address like 'office@example.com', checks it for correctness and returns it again as string."""
+    try:
+        email.headerregistry.Address(addr_spec=value)
+    except email.errors.HeaderParseError as e:
+        raise ValueError('Invalid email address: {}'.format(value), e)
+    return value
 class PhoneNumber(formencode.FancyValidator):
     """Telefonnumber in international format, e.g. u'+43-699-1234567'"""
     def __init__(self, default_cc=43):
 class PhoneNumber(formencode.FancyValidator):
     """Telefonnumber in international format, e.g. u'+43-699-1234567'"""
     def __init__(self, default_cc=43):
@@ -1053,6 +1061,10 @@ class PhoneNumber(formencode.FancyValidator):
         return self.validator.from_python(value, state)
 
 
         return self.validator.from_python(value, state)
 
 
+def email_to_str(value):
+    return str(email)
+
+
 class PhoneCommentListNeinLoopNone(NoneValidator):
     """List with semicolon-separated phone numbers in international format with optional comment or 'Nein' as string:
     u''                                                       <=> None
 class PhoneCommentListNeinLoopNone(NoneValidator):
     """List with semicolon-separated phone numbers in international format with optional comment or 'Nein' as string:
     u''                                                       <=> None