def total(self): if self._total_count is None: raise FacebookUnavailablePropertyException( "Couldn't retrieve the object total count for that type " "of request.", ) return self._total_count
def summary(self): if self._summary is None or not isinstance(self._summary, dict): raise FacebookUnavailablePropertyException( "Couldn't retrieve the object summary for that type " "of request.", ) return "<Summary> %s" % (json.dumps( self._summary, sort_keys=True, indent=4, separators=(',', ': '), ), )
def extract_results(self): """ If future is done, removes it from the futures list, dict and iterator itself. Then, if future finished successfully, :rtype: facebook_business.asyncobjects.AioEdgeIterator """ self._request_failed = False # If no future in iterator and the iterator is finished, returns the iterator itself. if not self._future: if self._finished_iteration: return self raise FacebookUnavailablePropertyException("first submit new async call") if self._future.done(): result = self._future.result() self._source_object.get_api_assured().remove_from_futures(self) del self._future self._future = None if self.last_error_type == "rate limit error": self.delay_next_call_for -= 10 if self.delay_next_call_for < 0: self.delay_next_call_for = 0 else: self.delay_next_call_for = 0 self.last_yield = time.time() if result.is_failure(): self.on_error(result) else: self.on_success(result) else: if not self._future.running() and not self._future.cancelled(): # still not running, just pending in a queue self._request_failed = False self._page_ready = False elif self._future.cancelled(): # was cancelled self.last_yield = time.time() self._request_failed = True self.delay_next_call_for = 0 logger.warning("request {} was cancelled, endpoint: {}, params: {}".format( str(self._future), str(self._path), self.params)) self.last_error = Exception("request {} was cancelled, endpoint: {}, params: {}".format( str(self._future), str(self._path), self.params)) self._source_object.get_api_assured().remove_from_futures(self) del self._future self._future = None elif int(time.time() - self.last_yield) > 600: # running for too long self.future_timed_out() if self.errors_streak >= 5: return self self.last_yield = time.time() self.recover_tmp_error(self.last_error) else: # just running self._request_failed = False self._page_ready = False return self