Skip to content

Commit 3f876af

Browse files
committed
added unittests and updated Email class
email class now allows empty instantiation without error If a name is passed, i.e. an email with no '@', then the name gets set rather than defaulting to email param
1 parent d483214 commit 3f876af

File tree

2 files changed

+74
-8
lines changed

2 files changed

+74
-8
lines changed

sendgrid/helpers/mail/mail.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -262,14 +262,15 @@ class Email(object):
262262
def __init__(self, email=None, name=None):
263263
self._name = None
264264
self._email = None
265-
if not name:
266-
# allows passing emails as "dude Fella <[email protected]>"
267-
self.parse_email(email)
268-
else:
269-
#allows backwards compatibility for Email(email, name)
270-
if email is not None:
271-
self.email = email
272-
self.name = name
265+
if name or email:
266+
if not name:
267+
# allows passing emails as "dude Fella <[email protected]>"
268+
self.parse_email(email)
269+
else:
270+
#allows backwards compatibility for Email(email, name)
271+
if email is not None:
272+
self.email = email
273+
self.name = name
273274

274275
@property
275276
def name(self):
@@ -303,6 +304,12 @@ def parse_email(self, email_info):
303304
import email.utils as rfc822
304305

305306
name, email = rfc822.parseaddr(email_info)
307+
308+
# more than likely a string was passed here instead of an email address
309+
if "@" not in email:
310+
name = email
311+
email = None
312+
306313
if not name:
307314
name = None
308315

test/test_email.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# -*- coding: utf-8 -*-
2+
import json
3+
4+
from sendgrid.helpers.mail import (Email)
5+
6+
try:
7+
import unittest2 as unittest
8+
except ImportError:
9+
import unittest
10+
11+
12+
class TestEmailObject(unittest.TestCase):
13+
def test_add_email_address(self):
14+
address = "[email protected]"
15+
email = Email(address)
16+
17+
self.assertEqual(email.email, "[email protected]")
18+
19+
def test_add_name(self):
20+
name = "SomeName"
21+
email = Email(name=name)
22+
23+
self.assertEqual(email.name, name)
24+
25+
def test_add_name_email(self):
26+
name = "SomeName"
27+
address = "[email protected]"
28+
email = Email(email=address, name=name)
29+
self.assertEqual(email.name, name)
30+
self.assertEqual(email.email, "[email protected]")
31+
32+
def test_add_rfc_function_finds_name_not_email(self):
33+
name = "SomeName"
34+
email = Email(name)
35+
36+
self.assertEqual(email.name, name)
37+
self.assertIsNone(email.email)
38+
39+
def test_add_rfc_email(self):
40+
name = "SomeName"
41+
address = "[email protected]"
42+
name_address = "{0} <{1}>".format(name, address)
43+
email = Email(name_address)
44+
self.assertEqual(email.name, name)
45+
self.assertEqual(email.email, "[email protected]")
46+
47+
def test_empty_obj_add_name(self):
48+
email = Email()
49+
name = "SomeName"
50+
email.name = name
51+
52+
self.assertEqual(email.name, name)
53+
54+
def test_empty_obj_add_email(self):
55+
email = Email()
56+
address = "[email protected]"
57+
email.email = address
58+
59+
self.assertEqual(email.email, address)

0 commit comments

Comments
 (0)