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')