From 3d4ac304d56530724f83304ffc647be6a7d2387c Mon Sep 17 00:00:00 2001 From: Kane Kim Date: Thu, 1 Mar 2012 19:43:53 +0500 Subject: [PATCH 1/3] add better exception handling to web transport --- sendgrid/transport/web.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sendgrid/transport/web.py b/sendgrid/transport/web.py index ab2a4512b..10e7a993c 100644 --- a/sendgrid/transport/web.py +++ b/sendgrid/transport/web.py @@ -85,7 +85,10 @@ def send(self, message): f = urllib2.urlopen(req) output = f.read() except IOError, e: - output = e.read() + try: + output = e.read() + except AttributeError: + raise exceptions.SGServiceException(e) output = json.loads(output) From 008ecaf91e0187b3b17292d3d0fe1159cff43f4f Mon Sep 17 00:00:00 2001 From: David McGuire Date: Wed, 4 Apr 2012 16:52:51 -0700 Subject: [PATCH 2/3] Include &user functionality (for web only) --- sendgrid/sendgrid.py | 12 +++++++----- sendgrid/transport/smtp.py | 6 +++--- sendgrid/transport/web.py | 21 ++++++++++++++------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/sendgrid/sendgrid.py b/sendgrid/sendgrid.py index 82149efaa..65e572557 100644 --- a/sendgrid/sendgrid.py +++ b/sendgrid/sendgrid.py @@ -14,18 +14,20 @@ class Sendgrid(object): """ Sendgrid API """ - def __init__(self, username, password, secure=True): + def __init__(self, username, password, **opts): """ Construct Sendgrid API object Args: username: Sendgrid uaername password: Sendgrid password - ssl: Use SSL + secure: Use SSL/TLS + user: Send mail on behalf of this user (web only) """ self.username = username self.password = password - self.secure = secure + self.secure = opts.get('secure', True) + self.user = opts.get('user', None) @property @@ -35,7 +37,7 @@ def web(self): Return web transport """ from transport import web - return web.Http(self.username, self.password, self.secure) + return web.Http(self.username, self.password, ssl=self.secure, user=self.user) @property @@ -45,4 +47,4 @@ def smtp(self): Return smtp transport """ from transport import smtp - return smtp.Smtp(self.username, self.password, self.secure) \ No newline at end of file + return smtp.Smtp(self.username, self.password, tls=self.secure) diff --git a/sendgrid/transport/smtp.py b/sendgrid/transport/smtp.py index 4f12fbad4..67c3c1e73 100644 --- a/sendgrid/transport/smtp.py +++ b/sendgrid/transport/smtp.py @@ -23,7 +23,7 @@ class Smtp(object): """ HOSTPORT = ('smtp.sendgrid.net', 587) - def __init__(self, username, password, tls=True): + def __init__(self, username, password, **opts): """ Construct smtp transport object @@ -34,7 +34,7 @@ def __init__(self, username, password, tls=True): """ self.username = username self.password = password - self.tls = tls + self.tls = opts.get('tls', True) def send(self, message): @@ -182,4 +182,4 @@ def _getFileMIME(self, attach): msg.add_header('Content-Disposition', 'attachment', filename=filename) - return msg \ No newline at end of file + return msg diff --git a/sendgrid/transport/web.py b/sendgrid/transport/web.py index 10e7a993c..f12df99c5 100644 --- a/sendgrid/transport/web.py +++ b/sendgrid/transport/web.py @@ -13,19 +13,22 @@ class Http(object): """ Transport to send emails using http """ - def __init__(self, username, password, ssl=True): + HOSTPORT = ('sendgrid.com',) + + def __init__(self, username, password, **opts): """ Construct web transport object Args: - username: Sendgrid uaername + username: Sendgrid username password: Sendgrid password ssl: Use SSL + user: Send mail on behalf of this user """ self.username = username self.password = password - self.ssl = ssl - + self.ssl = opts.get('ssl', True) + self.user = opts.get('user', None) def send(self, message): """ @@ -40,9 +43,12 @@ def send(self, message): Raises: SGServiceException: on error """ - url = "https://sendgrid.com/api/mail.send.json" + protocol = "https://" if not self.ssl: - url = "http://sendgrid.com/api/mail.send.json" + protocol = "http://" + endpoint = "/api/mail.send.json" + + url = protocol + ":".join(map(str, self.HOSTPORT)) + endpoint data = { 'api_user': self.username, @@ -73,6 +79,7 @@ def send(self, message): 'bcc': message.bcc, 'fromname': message.from_name, 'replyto': message.reply_to, + 'user': self.user, } for key in optional_params: @@ -95,4 +102,4 @@ def send(self, message): if output['message'] == 'error': raise exceptions.SGServiceException(output['errors']) - return True \ No newline at end of file + return True From 458013580d3a8c19d184187cdedc44f83f955e09 Mon Sep 17 00:00:00 2001 From: David McGuire Date: Tue, 29 Jan 2013 14:39:55 -0600 Subject: [PATCH 3/3] Fix defect where filter settings overwrite instead of accumulating. --- sendgrid/header.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sendgrid/header.py b/sendgrid/header.py index b981fd71d..fe8f4e5a5 100644 --- a/sendgrid/header.py +++ b/sendgrid/header.py @@ -71,7 +71,7 @@ def set_section(self, val): def add_filter_setting(self, fltr, setting, val): if 'filters' not in self.data: self.data['filters'] = {} - if fltr not in self.data: + if fltr not in self.data['filters']: self.data['filters'][fltr] = {} if 'settings' not in self.data['filters'][fltr]: self.data['filters'][fltr]['settings'] = {}