def _poll_job_completion(self, api, job_id): current_job_status = None current_progress = None exception_count = 0 while True: try: # fetch job job = jobs.get_job(api, job_id) new_job_status = job.get('status_code') # check for updated status if new_job_status != current_job_status: current_job_status = new_job_status logger.info('Mortar job_id [%s] switched to status_code [%s], description: %s' % \ (job_id, new_job_status, self._get_job_status_description(job))) # check for updated progress on running job if (new_job_status == jobs.STATUS_RUNNING) and ( job.get('progress') != current_progress): current_progress = job.get('progress') logger.info('Mortar job_id [%s] progress: [%s%%]' % (job_id, current_progress)) # final state if current_job_status in jobs.COMPLETE_STATUSES: return job else: # reset exception count on successful loop exception_count = 0 # sleep and continue polling time.sleep(self.job_polling_interval) except Exception, e: if exception_count < self.num_polling_retries: exception_count += 1 logger.info('Failure to get job status for job %s: %s' % (job_id, str(e))) time.sleep(self.job_polling_interval) else: raise
def _poll_job_completion(self, api, job_id): current_job_status = None current_progress = None exception_count = 0 while True: try: # fetch job job = jobs.get_job(api, job_id) new_job_status = job.get('status_code') # check for updated status if new_job_status != current_job_status: current_job_status = new_job_status logger.info('Mortar job_id [%s] switched to status_code [%s], description: %s' % \ (job_id, new_job_status, self._get_job_status_description(job))) # check for updated progress on running job if (new_job_status == jobs.STATUS_RUNNING) and (job.get('progress') != current_progress): current_progress = job.get('progress') logger.info('Mortar job_id [%s] progress: [%s%%]' % (job_id, current_progress)) # final state if current_job_status in jobs.COMPLETE_STATUSES: return job else: # reset exception count on successful loop exception_count = 0 # sleep and continue polling time.sleep(self.job_polling_interval) except Exception, e: if exception_count < self.num_polling_retries: exception_count += 1 logger.info('Failure to get job status for job %s: %s' % (job_id, str(e))) time.sleep(self.job_polling_interval) else: raise
def test_get_job(self): job_id = 'xyz' response = {'job_id': job_id, 'status_code': 'success'} self.api_mock.get.return_value = response job = jobs.get_job(self.api_mock, job_id) self.assertEquals(job, response)