From c6beedbc5db667de29387bcb9a6add207e273339 Mon Sep 17 00:00:00 2001 From: Sergey Lavrinenko Date: Thu, 2 Apr 2015 13:58:28 +0300 Subject: [PATCH] Separate sanitize_email from sanitize_address --- emails/testsuite/test_utils.py | 6 +++++- emails/utils.py | 26 +++++++++++++++----------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/emails/testsuite/test_utils.py b/emails/testsuite/test_utils.py index b730952..5591d14 100644 --- a/emails/testsuite/test_utils.py +++ b/emails/testsuite/test_utils.py @@ -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): diff --git a/emails/utils.py b/emails/utils.py index 187e6a8..24374d9 100644 --- a/emails/utils.py +++ b/emails/utils.py @@ -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():