Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 59 additions & 19 deletions pythonmarketo/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import json
import time

class MarketoClient:
class MarketoClient:
host = None
client_id = None
client_secret = None
Expand All @@ -15,7 +15,7 @@ class MarketoClient:
last_request_id = None
API_CALLS_MADE = 0
API_LIMIT = None

def __init__(self, host, client_id, client_secret, api_limit=None):
assert(host is not None)
assert(client_id is not None)
Expand All @@ -42,7 +42,11 @@ def execute(self, method, *args, **kargs):
'get_lead_activity':self.get_lead_activity,
'get_paging_token':self.get_paging_token,
'update_lead':self.update_lead,
'update_leads':self.update_leads,
'create_lead':self.create_lead,
'create_leads':self.create_leads,
'create_or_update_lead':self.create_or_update_lead,
'create_or_update_leads':self.create_or_update_leads,
'get_lead_activity_page':self.get_lead_activity_page,
'get_email_content_by_id':self.get_email_content_by_id,
'get_email_template_content_by_id':self.get_email_template_content_by_id,
Expand All @@ -57,19 +61,18 @@ def execute(self, method, *args, **kargs):
602 -> auth token expired
'''
if e.code in ['601', '602']:
continue
continue
else:
raise Exception({'message':e.message, 'code':e.code})
break
break
return result


def authenticate(self):
if self.valid_until is not None and\
self.valid_until > time.time():
return
args = {
'grant_type' : 'client_credentials',
args = {
'grant_type' : 'client_credentials',
'client_id' : self.client_id,
'client_secret' : self.client_secret
}
Expand All @@ -78,10 +81,10 @@ def authenticate(self):
self.token = data['access_token']
self.token_type = data['token_type']
self.expires_in = data['expires_in']
self.valid_until = time.time() + data['expires_in']
self.valid_until = time.time() + data['expires_in']
self.scope = data['scope']


def get_leads(self, filtr, values = [], fields = []):
self.authenticate()
values = values.split() if type(values) is str else values
Expand Down Expand Up @@ -113,7 +116,7 @@ def get_email_templates(self, offset, maxreturn, status=None):
self.last_request_id = data['requestId']
if not data['success'] : raise MarketoException(data['errors'][0])
return data['result']

def get_email_content_by_id(self, id):
self.authenticate()
if id is None: raise ValueError("Invalid argument: required argument id is none.")
Expand All @@ -125,7 +128,7 @@ def get_email_content_by_id(self, id):
self.last_request_id = data['requestId']
if not data['success'] : raise MarketoException(data['errors'][0])
return data['result']

def get_email_template_content_by_id(self, id, status = None):
self.authenticate()
if id is None: raise ValueError("Invalid argument: required argument id is none.")
Expand Down Expand Up @@ -158,8 +161,8 @@ def get_leads_by_listId(self, listId = None , batchSize = None, fields = []):
result_list.extend(data['result'])
if len(data['result']) == 0 or 'nextPageToken' not in data:
break
args['nextPageToken'] = data['nextPageToken']
return result_list
args['nextPageToken'] = data['nextPageToken']
return result_list

def get_activity_types(self):
self.authenticate()
Expand All @@ -171,7 +174,6 @@ def get_activity_types(self):
if not data['success'] : raise MarketoException(data['errors'][0])
return data['result']


def get_lead_activity_page(self, activityTypeIds, nextPageToken, batchSize = None, listId = None):
self.authenticate()
activityTypeIds = activityTypeIds.split() if type(activityTypeIds) is str else activityTypeIds
Expand Down Expand Up @@ -201,9 +203,9 @@ def get_lead_activity(self, activityTypeIds, sinceDatetime, batchSize = None, li
nextPageToken = result['nextPageToken']
if 'result' in result:
activity_result_list.extend(result['result'])
return activity_result_list

return activity_result_list

def get_paging_token(self, sinceDatetime):
self.authenticate()
args = {
Expand All @@ -226,6 +228,15 @@ def update_lead(self, lookupField, lookupValue, values):
}
return self.post(data)

def update_leads(self, lookupField, values_list):
updated_leads = [dict(list(values.items())) for values in values_list]
data = {
'action' : 'updateOnly',
'lookupField' : lookupField,
'input' : updated_leads
}
return self.post(data)

def create_lead(self, lookupField, lookupValue, values):
new_lead = dict(list({lookupField : lookupValue}.items()) + list(values.items()))
data = {
Expand All @@ -236,13 +247,42 @@ def create_lead(self, lookupField, lookupValue, values):
]
}
return self.post(data)


def create_leads(self, lookupField, values_list):
new_leads = [dict(list(values.items())) for values in values_list]
data = {
'action' : 'createOnly',
'lookupField' : lookupField,
'input' : new_leads
}
return self.post(data)

def create_or_update_lead(self, lookupField, lookupValue, values):
updated_lead = dict(list({lookupField : lookupValue}.items()) + list(values.items()))
data = {
'action' : 'createOrUpdate',
'lookupField' : lookupField,
'input' : [
updated_lead
]
}
return self.post(data)

def create_or_update_leads(self, lookupField, values_list):
updated_leads = [dict(list(values.items())) for values in values_list]
data = {
'action' : 'createOrUpdate',
'lookupField' : lookupField,
'input' : updated_leads
}
return self.post(data)

def post(self, data):
self.authenticate()
args = {
'access_token' : self.token
}
data = HttpLib().post("https://" + self.host + "/rest/v1/leads.json" , args, data)
if not data['success'] : raise MarketoException(data['errors'][0])
return data['result'][0]['status']
return data['result'][0]