def error(self): """ Returns a FacebookRequestError (located in the exceptions module) with an appropriate debug message. """ if self.is_failure(): return FacebookRequestError("Call was not successful", self._call, self.status(), self.headers(), self.body()) else: return None
def error(self): """ Returns a FacebookRequestError (located in the exceptions module) with an appropriate debug message. """ if self.is_failure(): return FacebookRequestError( "Call was not successful.\n" + "Request:\n\t%s\n" % self._call + "Response given:\n" + "\tHTTP Status: %s\n\tHeaders: %s\n\tBody: %s\n" % ( self.status(), self.headers(), self.body(), )) else: return None
def async_daily_call(self, data_date): """ Tries to pull data from facebook server, if there's an api related error, retries until a successful read, or stop after 5 attempts. :param data_date: specifies the date of data that we are pulling in YYYY-MM-DD format :return: the same date if succeed, None otherwise """ self.__init__() logger = logging.getLogger('test_log') logger.setLevel(logging.DEBUG) handler = logging.FileHandler(filename=self.log_local_dir) f = logging.Formatter( fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %I:%M:%S %p') handler.setFormatter(fmt=f) logger.addHandler(handler) snapshot_date = datetime.date.today() local_file_dir = self.report_local_dir + 'snapshot_date={0}\\'.format( snapshot_date) filename = local_file_dir + data_date + '.json.gz' self.params['time_range'] = {'since': data_date, 'until': data_date} report_start = time.time() # print 'start generating report for {0}'.format(data_date) logger.debug('start pulling data for {0} with pid: {1}'.format( data_date, os.getpid())) initial_pause = 2 for retry_attempt in range(1, 6): try: # print 'attempt {0} for date {1}'.format(retry_attempt, data_date) logger.debug('attempt {0} for date {1}'.format( retry_attempt, data_date)) self.get_report(self.fields, self.params, filename) # create a .done file donefile = local_file_dir + data_date + '.done' open(donefile, 'w').close() break except FacebookRequestError as er: if retry_attempt == 5: # print 'Failed 5 times. report for {0} failed...'.format(data_date) logger.debug(FacebookRequestError.body(er)) logger.debug( 'Process for {0} terminating after 5 failed runs'. format(data_date)) return None else: # print 'Failing due to an API error: {0}'.format(FacebookRequestError.body(er)) # print 'Retrying... attempt {0}, time into {1}'.format(retry_attempt + 1, time.time() - report_start) logger.debug('Failing due to an API error: {0}'.format( FacebookRequestError.body(er))) logger.debug( 'Retrying... attempt {0}, time into {1}'.format( retry_attempt + 1, time.time() - report_start)) time.sleep(initial_pause**retry_attempt) # log finish of a report # print 'report date: {0} done'.format(data_date) logger.debug('report date: {0} done'.format(data_date)) return data_date