def iterate_edge_async(self, target_objects_class, fields=None, params=None, is_async=False, include_summary=True, endpoint=None): from facebook_business.adobjects.adreportrun import AdReportRun """ Behaves as iterate_edge(...) if parameter is_async if False (Default value) If is_async is True: Returns an AsyncJob which can be checked using remote_read() to verify when the job is completed and the result ready to query or download using get_result() Example: >>> job = object.iterate_edge_async( TargetClass, fields, params, is_async=True) >>> time.sleep(10) >>> job.remote_read() >>> if job: result = job.read_result() print result """ synchronous = not is_async synchronous_iterator = self.iterate_edge( target_objects_class, fields, params, fetch_first_page=synchronous, include_summary=include_summary, ) if synchronous: return synchronous_iterator if not params: params = {} else: params = dict(params) self.__class__._assign_fields_to_params(fields, params) # To force an async response from an edge, do a POST instead of GET. # The response comes in the format of an AsyncJob which # indicates the progress of the async request. if endpoint is None: endpoint = target_objects_class.get_endpoint() response = self.get_api_assured().call( 'POST', (self.get_id_assured(), endpoint), params=params, ).json() # AsyncJob stores the real iterator # for when the result is ready to be queried result = AdReportRun() if 'report_run_id' in response: response['id'] = response['report_run_id'] result._set_data(response) return result
# indicates the progress of the async request. if endpoint is None: endpoint = target_objects_class.get_endpoint() response = self.get_api_assured().call( 'POST', (self.get_id_assured(), endpoint), params=params, ).json() # AsyncJob stores the real iterator # for when the result is ready to be queried result = AdReportRun() if 'report_run_id' in response: response['id'] = response['report_run_id'] result._set_data(response) return result def edge_object(self, target_objects_class, fields=None, params=None, endpoint=None): """ Returns first object when iterating over Cursor with argument self as source_object and the rest as given __init__ arguments. """ params = {} if not params else params.copy() params['limit'] = '1' for obj in self.iterate_edge( target_objects_class, fields=fields, params=params, endpoint=endpoint, ):