def _prepare_payload(self, recipients=None): def namestr(rec): if not rec.get('name'): return rec.get('email') return '"{}" <{}>'.format(rec['name'].replace('"', ''), rec['email'].replace(',', '')) if not recipients: recipients = self.solidify_recipients() num_rec = len(recipients) payload = SMTPAPIHeader() merge_vars = {} for key, val in self.global_merge_vars.items(): keystr = ':{}'.format(key) new_key = '{1}{0}{2}'.format(key, *self.delimiters) merge_vars[new_key] = [keystr] * num_rec payload.add_section(keystr, val) for index, recip in enumerate(recipients): payload.add_to(recip if isinstance(recip, str) else namestr(recip)) for rkey, rvalue in recip.get('merge_vars', {}).items(): new_key = '{1}{0}{2}'.format(rkey, *self.delimiters) if not merge_vars.get(new_key): merge_vars[new_key] = [None] * num_rec merge_vars[new_key][index] = rvalue if self.webhook_data: payload.set_unique_args(self.webhook_data) if self.ip_pool: payload.set_ip_pool(self.ip_pool) if self.template_name: payload.add_filter('templates', 'enabled', 1) payload.add_filter('templates', 'template_id', self.template_name) payload.set_substitutions(merge_vars) payload.add_filter('clicktrack', 'enable', self.track_clicks and 1 or 0) payload.add_filter('opentrack', 'enable', self.track_opens and 1 or 0) payload.set_categories(self.tags) return payload
def test_drop_empty(self): header = SMTPAPIHeader() header.set_tos([]) header.set_substitutions(json.loads('{"subKey":["subValue"]}')) header.set_sections(json.loads('{}')) header.set_categories([]) header.set_unique_args(json.loads('{"testUnique":"uniqueValue"}')) header.set_asm_group_id(None) header.set_send_each_at([]) header.set_ip_pool(None) header.add_filter('testFilter', 'filter', 'filterValue') self.assertEqual(self.dropsHeader, json.loads(header.json_string()))
def test_set(self): header = SMTPAPIHeader() header.set_tos(["*****@*****.**", "*****@*****.**", "*****@*****.**"]) header.set_substitutions(json.loads('{"subKey":["subValue"]}')) header.set_sections(json.loads('{"testSection":"sectionValue"}')) header.set_categories(["testCategory"]) header.set_unique_args(json.loads('{"testUnique":"uniqueValue"}')) header.set_asm_group_id(42) header.set_send_each_at([1409348513, 1409348514]) header.set_send_at(1409348515) header.set_ip_pool('testPool') header.add_filter('testFilter', 'filter', 'filterValue') self.assertEqual(self.validHeader, json.loads(header.json_string()))
def test_drop_empty(self): header = SMTPAPIHeader() header.set_tos([]) header.set_substitutions({ "subKey": ["subValue"], "decimalKey": [decimal.Decimal("1.23456789")] }) header.set_sections(json.loads('{}')) header.set_categories([]) header.set_unique_args(json.loads('{"testUnique":"uniqueValue"}')) header.set_asm_group_id(None) header.set_send_each_at([]) header.set_ip_pool(None) header.add_filter('testFilter', 'filter', 'filterValue') self.assertEqual(self.dropsHeader, json.loads(header.json_string()))
def test_add(self): header = SMTPAPIHeader() header.add_to('*****@*****.**') header.add_to(['*****@*****.**', '*****@*****.**']) header.add_substitution('subKey', 'subValue') header.add_section('testSection', 'sectionValue') header.add_category('testCategory') header.add_unique_arg('testUnique', 'uniqueValue') header.set_asm_group_id(42) header.add_send_each_at(1409348513) header.add_send_each_at(1409348514) header.set_send_at(1409348515) header.set_ip_pool('testPool') header.add_filter('testFilter', 'filter', 'filterValue') self.assertEqual(self.validHeader, json.loads(header.json_string()))
def test_add(self): header = SMTPAPIHeader() header.add_to('*****@*****.**') header.add_to(['*****@*****.**', '*****@*****.**']) header.add_substitution('subKey', 'subValue') header.add_substitution('decimalKey', decimal.Decimal("1.23456789")) header.add_section('testSection', 'sectionValue') header.add_category('testCategory') header.add_unique_arg('testUnique', 'uniqueValue') header.set_asm_group_id(42) header.add_send_each_at(1409348513) header.add_send_each_at(1409348514) header.set_send_at(1409348515) header.set_ip_pool('testPool') header.add_filter('testFilter', 'filter', 'filterValue') self.assertEqual(self.validHeader, json.loads(header.json_string()))
def test_set(self): header = SMTPAPIHeader() header.set_tos(["*****@*****.**", "*****@*****.**", "*****@*****.**"]) header.set_substitutions({ "subKey": ["subValue"], "decimalKey": [decimal.Decimal("1.23456789")] }) header.set_sections(json.loads('{"testSection":"sectionValue"}')) header.set_categories(["testCategory"]) header.set_unique_args(json.loads('{"testUnique":"uniqueValue"}')) header.set_asm_group_id(42) header.set_send_each_at([1409348513, 1409348514]) header.set_send_at(1409348515) header.set_ip_pool('testPool') header.add_filter('testFilter', 'filter', 'filterValue') self.assertEqual(self.validHeader, json.loads(header.json_string()))
# [Substitutions](http://sendgrid.com/docs/API_Reference/SMTP_API/substitution_tags.html) #header.add_substitution('key', 'value') header.set_substitutions({'key': ['value1', 'value2']}) # [Unique Arguments](http://sendgrid.com/docs/API_Reference/SMTP_API/unique_arguments.html) #header.add_unique_arg('key', 'value') header.set_unique_args({'key':'value'}) # [Categories](http://sendgrid.com/docs/API_Reference/SMTP_API/categories.html) #header.add_category('category') header.set_categories(['category1', 'category2']) # [Sections](http://sendgrid.com/docs/API_Reference/SMTP_API/section_tags.html) #header.add_section('key', 'section') header.set_sections({'key1':'section1', 'key2':'section2'}) # [Filters](http://sendgrid.com/docs/API_Reference/SMTP_API/apps.html) header.add_filter('filter', 'setting', 'value') # [ASM Group ID](https://sendgrid.com/docs/User_Guide/advanced_suppression_manager.html) header.set_asm_group_id('value') # [IP Pools](https://sendgrid.com/docs/API_Reference/Web_API_v3/IP_Management/ip_pools.html) header.set_ip_pool("testPool") # [Scheduling Parameters](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) #header.add_send_each_at(unix_timestamp) # must be a unix timestamp #header.set_send_each_at([]) # must be a unix timestamp header.set_send_at(int(time.time())) # must be a unix timestamp print(header.json_string())
# header.add_substitution('key', 'value') header.set_substitutions({'key': ['value1', 'value2']}) # [Unique Arguments](http://sendgrid.com/docs/API_Reference/SMTP_API/unique_arguments.html) # header.add_unique_arg('key', 'value') header.set_unique_args({'key': 'value'}) # [Categories](http://sendgrid.com/docs/API_Reference/SMTP_API/categories.html) # header.add_category('category') header.set_categories(['category1', 'category2']) # [Sections](http://sendgrid.com/docs/API_Reference/SMTP_API/section_tags.html) # header.add_section('key', 'section') header.set_sections({'key1': 'section1', 'key2': 'section2'}) # [Filters](http://sendgrid.com/docs/API_Reference/SMTP_API/apps.html) header.add_filter('filter', 'setting', 'value') # [ASM Group ID](https://sendgrid.com/docs/User_Guide/advanced_suppression_manager.html) header.set_asm_group_id('value') # [IP Pools](https://sendgrid.com/docs/API_Reference/Web_API_v3/IP_Management/ip_pools.html) header.set_ip_pool("testPool") # [Scheduling Parameters](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) # header.add_send_each_at(unix_timestamp) # must be a unix timestamp # header.set_send_each_at([]) # must be a unix timestamp header.set_send_at(int(time.time())) # must be a unix timestamp print(header.json_string())