Separate sanitize_email from sanitize_address

This commit is contained in:
Sergey Lavrinenko 2015-04-02 13:58:28 +03:00
parent 489d9bb8c9
commit c6beedbc5d
2 changed files with 20 additions and 12 deletions

View File

@ -4,7 +4,7 @@ import pytest
import datetime
import time
from emails.utils import (parse_name_and_email, encode_header, decode_header, sanitize_address, fetch_url,
MessageID, format_date_header, parse_name_and_email_list)
MessageID, format_date_header, parse_name_and_email_list, sanitize_email)
from emails.exc import HTTPLoaderError
@ -41,6 +41,10 @@ def test_sanitize_address():
assert sanitize_address('a@♤.d') == 'a@xn--f6h.d'
def test_sanitize_email():
assert sanitize_email('a@♤.d') == 'a@xn--f6h.d'
def test_fetch_url():
fetch_url('http://google.com')
with pytest.raises(HTTPLoaderError):

View File

@ -136,16 +136,7 @@ def parse_name_and_email(obj, encoding='utf-8'):
return to_unicode(name, encoding) or None, to_unicode(email, encoding) or None
def sanitize_address(addr, encoding='ascii'):
if isinstance(addr, string_types):
addr = parseaddr(to_unicode(addr))
nm, addr = addr
# This try-except clause is needed on Python 3 < 3.2.4
# http://bugs.python.org/issue14291
try:
nm = Header(nm, encoding).encode()
except UnicodeEncodeError:
nm = Header(nm, 'utf-8').encode()
def sanitize_email(addr, encoding='ascii'):
try:
addr.encode('ascii')
except UnicodeEncodeError: # IDN
@ -156,7 +147,20 @@ def sanitize_address(addr, encoding='ascii'):
addr = '@'.join([localpart, domain])
else:
addr = Header(addr, encoding).encode()
return formataddr((nm, addr))
return addr
def sanitize_address(addr, encoding='ascii'):
if isinstance(addr, string_types):
addr = parseaddr(to_unicode(addr))
nm, addr = addr
# This try-except clause is needed on Python 3 < 3.2.4
# http://bugs.python.org/issue14291
try:
nm = Header(nm, encoding).encode()
except UnicodeEncodeError:
nm = Header(nm, 'utf-8').encode()
return formataddr((nm, sanitize_email(addr)))
class MIMEMixin():