Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test(self, campaign_id, data):
"""
Send a test email.
:param campaign_id: The unique id for the campaign.
:type campaign_id: :py:class:`str`
:param data: The request body parameters
:type data: :py:class:`dict`
data = {
"test_emails": array*,
"send_type": string* (Must be one of "html" or "plaintext")
}
"""
for email in data['test_emails']:
check_email(email)
if data['send_type'] not in ['html', 'plaintext']:
raise ValueError('The send_type must be either "html" or "plaintext"')
self.campaign_id = campaign_id
return self._mc_client._post(url=self._build_path(campaign_id, 'actions/test'), data=data)
:param workflow_id: The unique id for the Automation workflow.
:type workflow_id: :py:class:`str`
:param email_id: The unique id for the Automation workflow email.
:type email_id: :py:class:`str`
:param data: The request body parameters
:type data: :py:class:`dict`
data = {
"email_address": string*
}
"""
self.workflow_id = workflow_id
self.email_id = email_id
if 'email_address' not in data:
raise KeyError('The automation email queue must have an email_address')
check_email(data['email_address'])
response = self._mc_client._post(
url=self._build_path(workflow_id, 'emails', email_id, 'queue'),
data=data
)
if response is not None:
self.subscriber_hash = response['id']
else:
self.subscriber_hash = None
return response
:param store_id: The store id.
:type store_id: :py:class:`str`
:param data: The request body parameters
:type data: :py:class:`dict`
data = {
"id": string*,
"email_address": string*,
"opt_in_status": boolean*
}
"""
self.store_id = store_id
if 'id' not in data:
raise KeyError('The store customer must have an id')
if 'email_address' not in data:
raise KeyError('The store customer must have an email_address')
check_email(data['email_address'])
if 'opt_in_status' not in data:
raise KeyError('The store customer must have an opt_in_status')
if data['opt_in_status'] not in [True, False]:
raise TypeError('The opt_in_status must be True or False')
response = self._mc_client._post(url=self._build_path(store_id, 'customers'), data=data)
if response is not None:
self.customer_id = response['id']
else:
self.customer_id = None
return response
:param list_id: The unique id for the list.
:type list_id: :py:class:`str`
:param segment_id: The unique id for the segment.
:type segment_id: :py:class:`str`
:param data: The request body parameters
:type data: :py:class:`dict`
data = {
"email_address": string*,
"status": string* (Must be one of 'subscribed', 'unsubscribed', 'cleaned', or 'pending')
}
"""
self.list_id = list_id
self.segment_id = segment_id
if 'email_address' not in data:
raise KeyError('The list segment member must have an email_address')
check_email(data['email_address'])
if 'status' not in data:
raise KeyError('The list segment member must have a status')
if data['status'] not in ['subscribed', 'unsubscribed', 'cleaned', 'pending']:
raise ValueError('The list segment member status must be one of "subscribed", "unsubscribed", "cleaned" or'
'"pending"')
response = self._mc_client._post(url=self._build_path(list_id, 'segments', segment_id, 'members'), data=data)
if response is not None:
self.subscriber_hash = response['id']
else:
self.subscriber_hash = None
return response
"subject_line": string*,
"from_name": string*,
"reply_to": string*
},
}
"""
self.campaign_id = campaign_id
if 'settings' not in data:
raise KeyError('The campaign must have settings')
if 'subject_line' not in data['settings']:
raise KeyError('The campaign settings must have a subject_line')
if 'from_name' not in data['settings']:
raise KeyError('The campaign settings must have a from_name')
if 'reply_to' not in data['settings']:
raise KeyError('The campaign settings must have a reply_to')
check_email(data['settings']['reply_to'])
return self._mc_client._patch(url=self._build_path(campaign_id), data=data)
remove a subscriber at any point in an Automation workflow, regardless
of how many emails they’ve been sent from that workflow. Once they’re
removed, they can never be added back to the same workflow.
:param workflow_id: The unique id for the Automation workflow.
:type workflow_id: :py:class:`str`
:param data: The request body parameters
:type data: :py:class:`dict`
data = {
"email_address": string*
}
"""
self.workflow_id = workflow_id
if 'email_address' not in data:
raise KeyError('The automation removed subscriber must have an email_address')
check_email(data['email_address'])
return self._mc_client._post(url=self._build_path(workflow_id, 'removed-subscribers'), data=data)
"type": string* (Must be one of "regular", "plaintext", "rss", "variate", or "absplit")
}
"""
if 'recipients' not in data:
raise KeyError('The campaign must have recipients')
if 'list_id' not in data['recipients']:
raise KeyError('The campaign recipients must have a list_id')
if 'settings' not in data:
raise KeyError('The campaign must have settings')
if 'subject_line' not in data['settings']:
raise KeyError('The campaign settings must have a subject_line')
if 'from_name' not in data['settings']:
raise KeyError('The campaign settings must have a from_name')
if 'reply_to' not in data['settings']:
raise KeyError('The campaign settings must have a reply_to')
check_email(data['settings']['reply_to'])
if 'type' not in data:
raise KeyError('The campaign must have a type')
if not data['type'] in ['regular', 'plaintext', 'rss', 'variate', 'abspilt']:
raise ValueError('The campaign type must be one of "regular", "plaintext", "rss", or "variate"')
if data['type'] == 'variate':
if 'variate_settings' not in data:
raise KeyError('The variate campaign must have variate_settings')
if 'winner_criteria' not in data['variate_settings']:
raise KeyError('The campaign variate_settings must have a winner_criteria')
if data['variate_settings']['winner_criteria'] not in ['opens', 'clicks', 'total_revenue', 'manual']:
raise ValueError('The campaign variate_settings '
'winner_criteria must be one of "opens", "clicks", "total_revenue", or "manual"')
if data['type'] == 'rss':
if 'rss_opts' not in data:
raise KeyError('The rss campaign must have rss_opts')
if 'feed_url' not in data['rss_opts']:
"status_if_new": string* (Must be one of 'subscribed', 'unsubscribed', 'cleaned', or 'pending')
}
],
"update_existing": boolean*
}
"""
self.list_id = list_id
if 'members' not in data:
raise KeyError('The update must have at least one member')
else:
if not len(data['members']) <= 500:
raise ValueError('You may only batch sub/unsub 500 members at a time')
for member in data['members']:
if 'email_address' not in member:
raise KeyError('Each list member must have an email_address')
check_email(member['email_address'])
if 'status' not in member and 'status_if_new' not in member:
raise KeyError('Each list member must have either a status or a status_if_new')
valid_statuses = ['subscribed', 'unsubscribed', 'cleaned', 'pending']
if 'status' in member and member['status'] not in valid_statuses:
raise ValueError('The list member status must be one of "subscribed", "unsubscribed", "cleaned", or '
'"pending"')
if 'status_if_new' in member and member['status_if_new'] not in valid_statuses:
raise ValueError('The list member status_if_new must be one of "subscribed", "unsubscribed", '
'"cleaned", or "pending"')
if 'update_existing' not in data:
data['update_existing'] = False
return self._mc_client._post(url=self._build_path(list_id), data=data)
raise KeyError('The list contact must have a city')
if 'state' not in data['contact']:
raise KeyError('The list contact must have a state')
if 'zip' not in data['contact']:
raise KeyError('The list contact must have a zip')
if 'country' not in data['contact']:
raise KeyError('The list contact must have a country')
if 'permission_reminder' not in data:
raise KeyError('The list must have a permission_reminder')
if 'campaign_defaults' not in data:
raise KeyError('The list must have a campaign_defaults')
if 'from_name' not in data['campaign_defaults']:
raise KeyError('The list campaign_defaults must have a from_name')
if 'from_email' not in data['campaign_defaults']:
raise KeyError('The list campaign_defaults must have a from_email')
check_email(data['campaign_defaults']['from_email'])
if 'subject' not in data['campaign_defaults']:
raise KeyError('The list campaign_defaults must have a subject')
if 'language' not in data['campaign_defaults']:
raise KeyError('The list campaign_defaults must have a language')
if 'email_type_option' not in data:
raise KeyError('The list must have an email_type_option')
if data['email_type_option'] not in [True, False]:
raise TypeError('The list email_type_option must be True or False')
return self._mc_client._patch(url=self._build_path(list_id), data=data)
"""
Post a new message to a conversation.
:param conversation_id: The unique id for the conversation.
:type conversation_id: :py:class:`str`
:param data: The request body parameters
:type data: :py:class:`dict`
data = {
"from_email": string*,
"read": boolean*
}
"""
self.conversation_id = conversation_id
if 'from_email' not in data:
raise KeyError('The conversation message must have a from_email')
check_email(data['from_email'])
if 'read' not in data:
raise KeyError('The conversation message must have a read')
if data['read'] not in [True, False]:
raise TypeError('The conversation message read must be True or False')
response = self._mc_client._post(url=self._build_path(conversation_id, 'messages'), data=data)
if response is not None:
self.message_id = response['id']
else:
self.message_id = None
return response