def authenticate(self, **kwargs): self.__login_api = LoginWithSoapAPI( self.httplib, self.url_resources, **kwargs) return self.__login_api.authenticate()
class SalesforceSoapAPI(SalesforceAPI): def __init__(self, httplib, url_resources, auth=None): super(SalesforceSoapAPI, self).__init__(url_resources, httplib, auth) self.__login_api = None def authenticate(self, **kwargs): self.__login_api = LoginWithSoapAPI(self.httplib, self.url_resources, **kwargs) return self.__login_api.authenticate() @utils.authenticate def query(self, query_string): return self.post(query_string, SalesforceSoapAPI.Action.QUERY) @utils.authenticate def query_all(self, query_string): response = self.post(query_string, SalesforceSoapAPI.Action.QUERYALL) xml_resp_value = xml.dom.minidom.parseString(response.text) def do_query_all(xml_response_value): done = utils.get_element_by_name(xml_response_value, 'done') if done: return response else: query_locator = utils.get_element_by_name( xml_response_value, 'queryLocator') result = self.query_more(query_locator) xml_result_value = xml.dom.minidom.parseString(result.text) done = utils.get_element_by_name(xml_result_value, 'done') total_size = utils.get_element_by_name(xml_result_value, 'totalSize') records = utils.get_element_by_name(xml_result_value, 'records') xml_response_value.getElementsByTagName('done').item( 0).firstChild.nodeValue = done xml_response_value.getElementsByTagName('totalSize').item( 0).firstChild.nodeValue += total_size xml_response_value.getElementsByTagName('records').appendChild( records) return do_query_all(xml_response_value) return do_query_all(xml_resp_value) @utils.authenticate def query_more(self, query_string): return self.post(query_string, SalesforceSoapAPI.Action.QUERYMORE) @utils.authenticate def search(self, search_string): return self.post(search_string, SalesforceSoapAPI.Action.SEARCH) @utils.authenticate def quick_search(self, search_string): return self.search('FIND {%s}' % search_string) @utils.authenticate def post(self, data, action): body = '' if action == SalesforceSoapAPI.Action.QUERY: body = query_body = utils.get_soap_query_body(data) elif action == SalesforceSoapAPI.Action.QUERYMORE: body = utils.get_soap_query_more_body(data) elif action == SalesforceSoapAPI.Action.QUERYALL: body = utils.get_soap_query_body(data) elif action == SalesforceSoapAPI.Action.SEARCH: body = utils.get_soap_search_body(data) else: raise ValueError("'action' " + action + " is not supported!") request_body = utils.soap_request_header().format( access_token=self.auth.access_token, method=action, request=body) post_url = self.url_resources.get_full_resource_url( self.auth.instance_url) return self.__send_request('POST', post_url, action, data=request_body) @utils.authenticate def get(self, get_url, params=None): pass @utils.authenticate def __getattr__(self, name): if not name[0].isalpha(): return object.__getattribute__(self, name) return SoapSObject(name, self.httplib, self.auth, self.url_resources) def __getstate__(self): return self.__dict__ def __setstate__(self, d): self.__dict__.update(d) def __send_request(self, method, url, action, **kwargs): headers = utils.xml_content_headers(len(kwargs['data']), action) request_url = utils.get_request_url( url, self.auth.instance_url, self.url_resources.get_resource_url()) return utils.send_request(method, self.httplib, request_url, headers, **kwargs) class Action(object): QUERY = 'query' QUERYALL = 'queryAll' QUERYMORE = 'queryMore' SEARCH = 'search'
class SalesforceSoapAPI(SalesforceAPI): def __init__(self, httplib, url_resources, auth=None): super(SalesforceSoapAPI, self).__init__(url_resources, httplib, auth) self.__login_api = None def authenticate(self, **kwargs): self.__login_api = LoginWithSoapAPI( self.httplib, self.url_resources, **kwargs) return self.__login_api.authenticate() @utils.authenticate def query(self, query_string): return self.post(query_string, SalesforceSoapAPI.Action.QUERY) @utils.authenticate def query_all(self, query_string): response = self.post(query_string, SalesforceSoapAPI.Action.QUERYALL) xml_resp_value = xml.dom.minidom.parseString(response.text.encode('utf-8')) def do_query_all(xml_response_value): done = utils.get_element_by_name(xml_response_value, 'done') if done: return response else: query_locator = utils.get_element_by_name(xml_response_value, 'queryLocator') result = self.query_more(query_locator) xml_result_value = xml.dom.minidom.parseString(result.text.encode('utf-8')) done = utils.get_element_by_name(xml_result_value, 'done') total_size = utils.get_element_by_name(xml_result_value, 'totalSize') records = utils.get_element_by_name(xml_result_value, 'records') xml_response_value.getElementsByTagName('done').item(0).firstChild.nodeValue = done xml_response_value.getElementsByTagName('totalSize').item(0).firstChild.nodeValue += total_size xml_response_value.getElementsByTagName('records').appendChild(records) return do_query_all(xml_response_value) return do_query_all(xml_resp_value) @utils.authenticate def query_more(self, query_string): return self.post(query_string, SalesforceSoapAPI.Action.QUERYMORE) @utils.authenticate def search(self, search_string): return self.post(search_string, SalesforceSoapAPI.Action.SEARCH) @utils.authenticate def quick_search(self, search_string): return self.search('FIND {%s}' % search_string) @utils.authenticate def post(self, data, action): body = '' if action == SalesforceSoapAPI.Action.QUERY: body = utils.get_soap_query_body(data) elif action == SalesforceSoapAPI.Action.QUERYMORE: body = utils.get_soap_query_more_body(data) elif action == SalesforceSoapAPI.Action.QUERYALL: body = utils.get_soap_query_body(data) elif action == SalesforceSoapAPI.Action.SEARCH: body = utils.get_soap_search_body(data) else: raise ValueError("'action' " + action + " is not supported!") request_body = utils.soap_request_header().format( access_token=self.auth.access_token, method=action, request=body) post_url = self.url_resources.get_full_resource_url( self.auth.instance_url) return self.__send_request('POST', post_url, action, data=request_body) @utils.authenticate def get(self, get_url, params=None): pass @utils.authenticate def __getattr__(self, name): if not name[0].isalpha(): return object.__getattribute__(self, name) return SoapSObject(name, self.httplib, self.auth, self.url_resources) def __getstate__(self): return self.__dict__ def __setstate__(self, d): self.__dict__.update(d) def __send_request(self, method, url, action, **kwargs): headers = utils.xml_content_headers(len(kwargs['data']), action) request_url = utils.get_request_url(url, self.auth.instance_url, self.url_resources.get_resource_url()) return utils.send_request(method, self.httplib, request_url, headers, **kwargs) class Action(object): QUERY = 'query' QUERYALL = 'queryAll' QUERYMORE = 'queryMore' SEARCH = 'search'