Skip to content

Commit 16eb0c3

Browse files
feat: add v3 bypass filters (#983)
1 parent 38b0ad6 commit 16eb0c3

7 files changed

+292
-2
lines changed

sendgrid/helpers/mail/__init__.py

+3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
from .bcc_email import Bcc
55
from .bcc_settings import BccSettings
66
from .bcc_settings_email import BccSettingsEmail
7+
from .bypass_bounce_management import BypassBounceManagement
78
from .bypass_list_management import BypassListManagement
9+
from .bypass_spam_management import BypassSpamManagement
10+
from .bypass_unsubscribe_management import BypassUnsubscribeManagement
811
from .category import Category
912
from .cc_email import Cc
1013
from .click_tracking import ClickTracking
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class BypassBounceManagement(object):
2+
"""Setting for Bypass Bounce Management
3+
4+
5+
Allows you to bypass the bounce list to ensure that the email is delivered to recipients.
6+
Spam report and unsubscribe lists will still be checked; addresses on these other lists
7+
will not receive the message. This filter cannot be combined with the bypass_list_management filter.
8+
"""
9+
10+
def __init__(self, enable=None):
11+
"""Create a BypassBounceManagement.
12+
13+
:param enable: Whether emails should bypass bounce management.
14+
:type enable: boolean, optional
15+
"""
16+
self._enable = None
17+
18+
if enable is not None:
19+
self.enable = enable
20+
21+
@property
22+
def enable(self):
23+
"""Indicates if this setting is enabled.
24+
25+
:rtype: boolean
26+
"""
27+
return self._enable
28+
29+
@enable.setter
30+
def enable(self, value):
31+
"""Indicates if this setting is enabled.
32+
33+
:param value: Indicates if this setting is enabled.
34+
:type value: boolean
35+
"""
36+
self._enable = value
37+
38+
def get(self):
39+
"""
40+
Get a JSON-ready representation of this BypassBounceManagement.
41+
42+
:returns: This BypassBounceManagement, ready for use in a request body.
43+
:rtype: dict
44+
"""
45+
bypass_bounce_management = {}
46+
if self.enable is not None:
47+
bypass_bounce_management["enable"] = self.enable
48+
return bypass_bounce_management
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class BypassSpamManagement(object):
2+
"""Setting for Bypass Spam Management
3+
4+
Allows you to bypass the spam report list to ensure that the email is delivered to recipients.
5+
Bounce and unsubscribe lists will still be checked; addresses on these other lists will not
6+
receive the message. This filter cannot be combined with the bypass_list_management filter.
7+
"""
8+
9+
def __init__(self, enable=None):
10+
"""Create a BypassSpamManagement.
11+
12+
:param enable: Whether emails should bypass spam management.
13+
:type enable: boolean, optional
14+
"""
15+
self._enable = None
16+
17+
if enable is not None:
18+
self.enable = enable
19+
20+
@property
21+
def enable(self):
22+
"""Indicates if this setting is enabled.
23+
24+
:rtype: boolean
25+
"""
26+
return self._enable
27+
28+
@enable.setter
29+
def enable(self, value):
30+
"""Indicates if this setting is enabled.
31+
32+
:param value: Indicates if this setting is enabled.
33+
:type value: boolean
34+
"""
35+
self._enable = value
36+
37+
def get(self):
38+
"""
39+
Get a JSON-ready representation of this BypassSpamManagement.
40+
41+
:returns: This BypassSpamManagement, ready for use in a request body.
42+
:rtype: dict
43+
"""
44+
bypass_spam_management = {}
45+
if self.enable is not None:
46+
bypass_spam_management["enable"] = self.enable
47+
return bypass_spam_management
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
class BypassUnsubscribeManagement(object):
2+
"""Setting for Bypass Unsubscribe Management
3+
4+
5+
Allows you to bypass the global unsubscribe list to ensure that the email is delivered to recipients.
6+
Bounce and spam report lists will still be checked; addresses on these other lists will not receive
7+
the message. This filter applies only to global unsubscribes and will not bypass group unsubscribes.
8+
This filter cannot be combined with the bypass_list_management filter.
9+
"""
10+
11+
def __init__(self, enable=None):
12+
"""Create a BypassUnsubscribeManagement.
13+
14+
:param enable: Whether emails should bypass unsubscribe management.
15+
:type enable: boolean, optional
16+
"""
17+
self._enable = None
18+
19+
if enable is not None:
20+
self.enable = enable
21+
22+
@property
23+
def enable(self):
24+
"""Indicates if this setting is enabled.
25+
26+
:rtype: boolean
27+
"""
28+
return self._enable
29+
30+
@enable.setter
31+
def enable(self, value):
32+
"""Indicates if this setting is enabled.
33+
34+
:param value: Indicates if this setting is enabled.
35+
:type value: boolean
36+
"""
37+
self._enable = value
38+
39+
def get(self):
40+
"""
41+
Get a JSON-ready representation of this BypassUnsubscribeManagement.
42+
43+
:returns: This BypassUnsubscribeManagement, ready for use in a request body.
44+
:rtype: dict
45+
"""
46+
bypass_unsubscribe_management = {}
47+
if self.enable is not None:
48+
bypass_unsubscribe_management["enable"] = self.enable
49+
return bypass_unsubscribe_management

sendgrid/helpers/mail/mail_settings.py

+87
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,29 @@ class MailSettings(object):
33

44
def __init__(self,
55
bcc_settings=None,
6+
bypass_bounce_management=None,
67
bypass_list_management=None,
8+
bypass_spam_management=None,
9+
bypass_unsubscribe_management=None,
710
footer_settings=None,
811
sandbox_mode=None,
912
spam_check=None):
1013
"""Create a MailSettings object
1114
1215
:param bcc_settings: The BCC Settings of this MailSettings
1316
:type bcc_settings: BCCSettings, optional
17+
:param bypass_bounce_management: Whether this MailSettings bypasses bounce management.
18+
Should not be combined with bypass_list_management.
19+
:type bypass_list_management: BypassBounceManagement, optional
1420
:param bypass_list_management: Whether this MailSettings bypasses list
1521
management
1622
:type bypass_list_management: BypassListManagement, optional
23+
:param bypass_spam_management: Whether this MailSettings bypasses spam management.
24+
Should not be combined with bypass_list_management.
25+
:type bypass_list_management: BypassSpamManagement, optional
26+
:param bypass_unsubscribe_management: Whether this MailSettings bypasses unsubscribe management.
27+
Should not be combined with bypass_list_management.
28+
:type bypass_list_management: BypassUnsubscribeManagement, optional
1729
:param footer_settings: The default footer specified by this
1830
MailSettings
1931
:type footer_settings: FooterSettings, optional
@@ -24,17 +36,29 @@ def __init__(self,
2436
:type spam_check: SpamCheck, optional
2537
"""
2638
self._bcc_settings = None
39+
self._bypass_bounce_management = None
2740
self._bypass_list_management = None
41+
self._bypass_spam_management = None
42+
self._bypass_unsubscribe_management = None
2843
self._footer_settings = None
2944
self._sandbox_mode = None
3045
self._spam_check = None
3146

3247
if bcc_settings is not None:
3348
self.bcc_settings = bcc_settings
3449

50+
if bypass_bounce_management is not None:
51+
self.bypass_bounce_management = bypass_bounce_management
52+
3553
if bypass_list_management is not None:
3654
self.bypass_list_management = bypass_list_management
3755

56+
if bypass_spam_management is not None:
57+
self.bypass_spam_management = bypass_spam_management
58+
59+
if bypass_unsubscribe_management is not None:
60+
self.bypass_unsubscribe_management = bypass_unsubscribe_management
61+
3862
if footer_settings is not None:
3963
self.footer_settings = footer_settings
4064

@@ -61,6 +85,23 @@ def bcc_settings(self, value):
6185
"""
6286
self._bcc_settings = value
6387

88+
@property
89+
def bypass_bounce_management(self):
90+
"""Whether this MailSettings bypasses bounce management.
91+
92+
:rtype: BypassBounceManagement
93+
"""
94+
return self._bypass_bounce_management
95+
96+
@bypass_bounce_management.setter
97+
def bypass_bounce_management(self, value):
98+
"""Whether this MailSettings bypasses bounce management.
99+
100+
:param value: Whether this MailSettings bypasses bounce management.
101+
:type value: BypassBounceManagement
102+
"""
103+
self._bypass_bounce_management = value
104+
64105
@property
65106
def bypass_list_management(self):
66107
"""Whether this MailSettings bypasses list management.
@@ -78,6 +119,40 @@ def bypass_list_management(self, value):
78119
"""
79120
self._bypass_list_management = value
80121

122+
@property
123+
def bypass_spam_management(self):
124+
"""Whether this MailSettings bypasses spam management.
125+
126+
:rtype: BypassSpamManagement
127+
"""
128+
return self._bypass_spam_management
129+
130+
@bypass_spam_management.setter
131+
def bypass_spam_management(self, value):
132+
"""Whether this MailSettings bypasses spam management.
133+
134+
:param value: Whether this MailSettings bypasses spam management.
135+
:type value: BypassSpamManagement
136+
"""
137+
self._bypass_spam_management = value
138+
139+
@property
140+
def bypass_unsubscribe_management(self):
141+
"""Whether this MailSettings bypasses unsubscribe management.
142+
143+
:rtype: BypassUnsubscribeManagement
144+
"""
145+
return self._bypass_unsubscribe_management
146+
147+
@bypass_unsubscribe_management.setter
148+
def bypass_unsubscribe_management(self, value):
149+
"""Whether this MailSettings bypasses unsubscribe management.
150+
151+
:param value: Whether this MailSettings bypasses unsubscribe management.
152+
:type value: BypassUnsubscribeManagement
153+
"""
154+
self._bypass_unsubscribe_management = value
155+
81156
@property
82157
def footer_settings(self):
83158
"""The default footer specified by this MailSettings.
@@ -141,10 +216,22 @@ def get(self):
141216
if self.bcc_settings is not None:
142217
mail_settings["bcc"] = self.bcc_settings.get()
143218

219+
if self.bypass_bounce_management is not None:
220+
mail_settings[
221+
"bypass_bounce_management"] = self.bypass_bounce_management.get()
222+
144223
if self.bypass_list_management is not None:
145224
mail_settings[
146225
"bypass_list_management"] = self.bypass_list_management.get()
147226

227+
if self.bypass_spam_management is not None:
228+
mail_settings[
229+
"bypass_spam_management"] = self.bypass_spam_management.get()
230+
231+
if self.bypass_unsubscribe_management is not None:
232+
mail_settings[
233+
"bypass_unsubscribe_management"] = self.bypass_unsubscribe_management.get()
234+
148235
if self.footer_settings is not None:
149236
mail_settings["footer"] = self.footer_settings.get()
150237

test/test_mail_helpers.py

+53-1
Original file line numberDiff line numberDiff line change
@@ -935,7 +935,8 @@ def test_kitchen_sink(self):
935935
FileContent, FileType, Disposition, ContentId, TemplateId,
936936
Section, ReplyTo, Category, BatchId, Asm, GroupId, GroupsToDisplay,
937937
IpPoolName, MailSettings, BccSettings, BccSettingsEmail,
938-
BypassListManagement, FooterSettings, FooterText,
938+
BypassBounceManagement, BypassListManagement, BypassSpamManagement,
939+
BypassUnsubscribeManagement, FooterSettings, FooterText,
939940
FooterHtml, SandBoxMode, SpamCheck, SpamThreshold, SpamUrl,
940941
TrackingSettings, ClickTracking, SubscriptionTracking,
941942
SubscriptionText, SubscriptionHtml, SubscriptionSubstitutionTag,
@@ -1116,7 +1117,10 @@ def test_kitchen_sink(self):
11161117
mail_settings = MailSettings()
11171118
mail_settings.bcc_settings = BccSettings(
11181119
False, BccSettingsEmail("[email protected]"))
1120+
mail_settings.bypass_bounce_management = BypassBounceManagement(False)
11191121
mail_settings.bypass_list_management = BypassListManagement(False)
1122+
mail_settings.bypass_spam_management = BypassSpamManagement(False)
1123+
mail_settings.bypass_unsubscribe_management = BypassUnsubscribeManagement(False)
11201124
mail_settings.footer_settings = FooterSettings(
11211125
True, FooterText("w00t"), FooterHtml("<string>w00t!<strong>"))
11221126
mail_settings.sandbox_mode = SandBoxMode(True)
@@ -1223,9 +1227,18 @@ def test_kitchen_sink(self):
12231227
"email": "[email protected]",
12241228
"enable": false
12251229
},
1230+
"bypass_bounce_management": {
1231+
"enable": false
1232+
},
12261233
"bypass_list_management": {
12271234
"enable": false
12281235
},
1236+
"bypass_spam_management": {
1237+
"enable": false
1238+
},
1239+
"bypass_unsubscribe_management": {
1240+
"enable": false
1241+
},
12291242
"footer": {
12301243
"enable": true,
12311244
"html": "<string>w00t!<strong>",
@@ -1613,3 +1626,42 @@ def test_disable_tracking(self):
16131626
tracking_settings.get(),
16141627
{'click_tracking': {'enable': False, 'enable_text': False}}
16151628
)
1629+
1630+
def test_bypass_list_management(self):
1631+
from sendgrid.helpers.mail import (MailSettings, BypassListManagement)
1632+
mail_settings = MailSettings()
1633+
mail_settings.bypass_list_management = BypassListManagement(True)
1634+
1635+
self.assertEqual(
1636+
mail_settings.get(),
1637+
{
1638+
"bypass_list_management": {
1639+
"enable": True
1640+
},
1641+
},
1642+
)
1643+
1644+
def test_v3_bypass_filters(self):
1645+
from sendgrid.helpers.mail import (
1646+
MailSettings, BypassBounceManagement,
1647+
BypassSpamManagement, BypassUnsubscribeManagement
1648+
)
1649+
mail_settings = MailSettings()
1650+
mail_settings.bypass_bounce_management = BypassBounceManagement(True)
1651+
mail_settings.bypass_spam_management = BypassSpamManagement(True)
1652+
mail_settings.bypass_unsubscribe_management = BypassUnsubscribeManagement(True)
1653+
1654+
self.assertEqual(
1655+
mail_settings.get(),
1656+
{
1657+
"bypass_bounce_management": {
1658+
"enable": True
1659+
},
1660+
"bypass_spam_management": {
1661+
"enable": True
1662+
},
1663+
"bypass_unsubscribe_management": {
1664+
"enable": True
1665+
},
1666+
},
1667+
)

0 commit comments

Comments
 (0)