in templates/python/facebook_business/api.py [0:0]
def execute(self):
"""Makes a batch call to the api associated with this object.
For each individual call response, calls the success or failure callback
function if they were specified.
Note: Does not explicitly raise exceptions. Individual exceptions won't
be thrown for each call that fails. The success and failure callback
functions corresponding to a call should handle its success or failure.
Returns:
If some of the calls have failed, returns a new FacebookAdsApiBatch
object with those calls. Otherwise, returns None.
"""
if not self._batch:
return None
method = 'POST'
path = tuple()
params = {'batch': self._batch}
files = {}
for call_files in self._files:
if call_files:
files.update(call_files)
fb_response = self._api.call(
method,
path,
params=params,
files=files,
)
responses = fb_response.json()
retry_indices = []
for index, response in enumerate(responses):
if response:
body = response.get('body')
code = response.get('code')
headers = response.get('headers')
inner_fb_response = FacebookResponse(
body=body,
headers=headers,
http_status=code,
call=self._batch[index],
)
if inner_fb_response.is_success():
if self._success_callbacks[index]:
self._success_callbacks[index](inner_fb_response)
elif self._failure_callbacks[index]:
self._failure_callbacks[index](inner_fb_response)
else:
retry_indices.append(index)
if retry_indices:
new_batch = self.__class__(self._api)
new_batch._files = [self._files[index] for index in retry_indices]
new_batch._batch = [self._batch[index] for index in retry_indices]
new_batch._success_callbacks = [self._success_callbacks[index]
for index in retry_indices]
new_batch._failure_callbacks = [self._failure_callbacks[index]
for index in retry_indices]
return new_batch
else:
return None