api-client-python/Intaro.py
2014-09-11 12:51:09 +04:00

218 lines
6.2 KiB
Python

import requests, json
class IntaroApy:
"""Intaro Api wrapper"""
apiVersion = '3'
def __init__(self, crmUrl, apiKey):
self.apiUrl = crmUrl + '/api/v' + IntaroApy.apiVersion + '/'
self.apiKey = apiKey
self.parameters = { 'apiKey': apiKey }
def requestApi(self, url, method='GET', format='json'):
#TODO: catch http exceptions
if method == 'GET':
result = requests.get(url, params=self.parameters)
elif method == 'POST':
result = requests.post(url, data=self.parameters)
statusCode = result.status_code
r = result.json()
# reset params dict
self.parameters = { 'apiKey': self.apiKey }
if statusCode > 400 or r.has_key('success') and r['success'] == False :
#TODO: raise ApiException
pass
if r.has_key('generatedAt') :
self.generatedAt = r['generatedAt']
del r['generatedAt']
del r['success']
return r
def getErrorMessage(self, response) :
if type(response) is not dict : return ''
err = ''
if response.has_key('message'):
err = response['message']
elif response.has_key('error') :
err = response['error']['message']
elif response.has_key('errorMsg') :
err = response['errorMsg']
if len(err) == 0 : return 'Application Error'
return err
def orderGet(self, id, by='externalId') :
url = self.apiUrl + 'orders/' + str(id)
if by != 'externalId' :
self.parameters['by'] = by
return self.requestApi(url)
def orderCreate(self, order) :
dataJson = json.dumps(order)
self.parameters['order'] = dataJson
url = self.apiUrl + 'orders/create'
return self.requestApi(url, 'POST')
def orderEdit(self, order) :
dataJson = json.dumps(order)
self.parameters['order'] = dataJson
url = self.apiUrl + 'orders/' + str(order['externalId']) + '/edit'
return self.requestApi(url, 'POST')
def orderUpload(self, orders) :
dataJson = json.dumps(orders)
self.parameters['orders'] = dataJson
url = self.apiUrl + 'orders/' + str(order['externalId']) + '/edit'
result = self.requestApi(url, 'POST')
if type(result) is dict and result.has_key('uploadedOrders') :
return result['uploadedOrders']
else :
return result
def orderFixExternalIds(self, orders) :
dataJson = json.dumps(orders)
self.parameters['orders'] = dataJson
url = self.apiUrl + 'orders/fix-external-ids'
return self.requestApi(url, 'POST')
def orderHistory(self, startDate='', endDate='', limit=100, offset=0) :
url = self.apiUrl + 'orders/history'
self.parameters['startDate'] = startDate
self.parameters['endDate'] = endDate
self.parameters['limit'] = limit
self.parameters['offset'] = offset
return self.requestApi(url)
def customerGet(self, id, by='externalId') :
url = self.apiUrl + 'customers/' + str(id)
if by != 'externalId' :
self.parameters['by'] = by
return self.requestApi(url)
def customers(self, phone=None, email=None, fio=None, limit=200, offset=0) :
url = self.apiUrl + 'customers'
if email :
self.parameters['email'] = email
if phone :
self.parameters['phone'] = phone
if fio :
self.parameters['fio'] = fio
self.parameters['limit'] = limit
self.parameters['offset'] = offset
return self.requestApi(url)
def customerCreate(self, customer) :
dataJson = json.dumps(customer)
self.parameters['customer'] = dataJson
url = self.apiUrl + 'customers/create'
return self.requestApi(url, 'POST')
def customerEdit(self, customer) :
dataJson = json.dumps(customer)
self.parameters['customer'] = dataJson
url = self.apiUrl + 'customers/' + customer['externalId'] + '/edit'
return self.requestApi(url, 'POST')
def customerUpload(self, customers) :
dataJson = json.dumps(customers)
self.parameters['customers'] = dataJson
url = self.apiUrl + 'customers/upload'
result = self.requestApi(url, 'POST')
if type(result) is dict and result.has_key('uploaded') :
return result['uploaded']
else :
return result
def deliveryTypesList(self) :
url = self.apiUrl + 'reference/delivery-types'
return self.requestApi(url)
def deliveryTypeEdit(self, deliveryType) :
dataJson = json.dumps(deliveryType)
self.parameters['deliveryType'] = dataJson
url = self.apiUrl + 'reference/delivery-types/' + deliveryType['code'] + '/edit'
return self.requestApi(url, 'POST')
def deliveryServicesList(self) :
url = self.apiUrl + 'reference/delivery-services'
return self.requestApi(url)
def deliveryServiceEdit(self, deliveryService) :
dataJson = json.dumps(deliveryService)
self.parameters['deliveryService'] = dataJson
url = self.apiUrl + 'reference/delivery-services/' + deliveryService['code'] + '/edit'
return self.requestApi(url, 'POST')
def paymentTypesList(self) :
url = self.apiUrl + 'reference/payment-types'
return self.requestApi(url)
def paymentTypesEdit(self, paymentType) :
dataJson = json.dumps(paymentType)
self.parameters['paymentType'] = dataJson
url = self.apiUrl + 'reference/payment-types/' + paymentType['code'] + '/edit'
return self.requestApi(url, 'POST')
def orderTypesList(self) :
url = self.apiUrl + 'reference/order-types'
return self.requestApi(url)
def orderTypesEdit(self, orderType) :
dataJson = json.dumps(orderType)
self.parameters['orderType'] = dataJson
url = self.apiUrl + 'reference/order-types/' + orderType['code'] + '/edit'
return self.requestApi(url, 'POST')
def orderMethodsList(self) :
url = self.apiUrl + 'reference/order-methods'
return self.requestApi(url)
def orderMethodsEdit(self, orderMethod) :
dataJson = json.dumps(orderMethod)
self.parameters['orderMethod'] = dataJson
url = self.apiUrl + 'reference/order-methods/' + orderMethod['code'] + '/edit'
return self.requestApi(url, 'POST')
def orderStatusesList(self) :
url = self.apiUrl + 'reference/statuses'
return self.requestApi(url)
def orderStatusEdit(self, status) :
dataJson = json.dumps(orderStatuse)
self.parameters['status'] = dataJson
url = self.apiUrl + 'reference/statuses/' + status['code'] + '/edit'
return self.requestApi(url, 'POST')