def add( self, method, relative_path, params=None, headers=None, files=None, success=None, failure=None, transient_error=None, request=None, ): """Adds a call to the batch. Args: method: The HTTP method name (e.g. 'GET'). relative_path: A tuple of path tokens or a relative URL string. A tuple will be translated to a url as follows: <graph url>/<tuple[0]>/<tuple[1]>... It will be assumed that if the path is not a string, it will be iterable. params (optional): A mapping of request parameters where a key is the parameter name and its value is a string or an object which can be JSON-encoded. headers (optional): A mapping of request headers where a key is the header name and its value is the header value. files (optional): An optional mapping of file names to binary open file objects. These files will be attached to the request. success (optional): A callback function which will be called with the FacebookResponse of this call if the call succeeded. failure (optional): A callback function which will be called with the FacebookResponse of this call if the call failed. request (optional): The APIRequest object Returns: A dictionary describing the call. """ if isinstance(transient_error, FacebookRequest): api_utils.warning( "8th argument of the FacebookAdsApiBatch.add() method is " "now a callback for transient errors. Please either adapt " "you positional arguments or switch to keyword arguments." ) request, transient_error = transient_error, None if not isinstance(relative_path, six.string_types): relative_url = '/'.join(relative_path) else: relative_url = relative_path call = { 'method': method, 'relative_url': relative_url, } if params: params = _top_level_param_json_encode(params) keyvals = ['%s=%s' % (key, urls.quote_with_encoding(value)) for key, value in params.items()] if method == 'GET': call['relative_url'] += '?' + '&'.join(keyvals) else: call['body'] = '&'.join(keyvals) if files: call['attached_files'] = ','.join(files.keys()) if headers: call['headers'] = [] for header in headers: batch_formatted_header = {} batch_formatted_header['name'] = header batch_formatted_header['value'] = headers[header] call['headers'].append(batch_formatted_header) self._batch.append(call) self._files.append(files) self._success_callbacks.append(success) self._failure_callbacks.append(failure) self._transient_errors_callbacks.append(transient_error) self._requests.append(request) return call
def add( self, method, relative_path, params=None, headers=None, files=None, success=None, failure=None, request=None, ): """Adds a call to the batch. Args: method: The HTTP method name (e.g. 'GET'). relative_path: A tuple of path tokens or a relative URL string. A tuple will be translated to a url as follows: <graph url>/<tuple[0]>/<tuple[1]>... It will be assumed that if the path is not a string, it will be iterable. params (optional): A mapping of request parameters where a key is the parameter name and its value is a string or an object which can be JSON-encoded. headers (optional): A mapping of request headers where a key is the header name and its value is the header value. files (optional): An optional mapping of file names to binary open file objects. These files will be attached to the request. success (optional): A callback function which will be called with the FacebookResponse of this call if the call succeeded. failure (optional): A callback function which will be called with the FacebookResponse of this call if the call failed. request (optional): The APIRequest object Returns: A dictionary describing the call. """ if not isinstance(relative_path, six.string_types): relative_url = '/'.join(relative_path) else: relative_url = relative_path call = { 'method': method, 'relative_url': relative_url, } if params: params = _top_level_param_json_encode(params) keyvals = ['%s=%s' % (key, urls.quote_with_encoding(value)) for key, value in params.items()] if method == 'GET': call['relative_url'] += '?' + '&'.join(keyvals) else: call['body'] = '&'.join(keyvals) if files: call['attached_files'] = ','.join(files.keys()) if headers: call['headers'] = [] for header in headers: batch_formatted_header = {} batch_formatted_header['name'] = header batch_formatted_header['value'] = headers[header] call['headers'].append(batch_formatted_header) self._batch.append(call) self._files.append(files) self._success_callbacks.append(success) self._failure_callbacks.append(failure) self._requests.append(request) return call