def sync_task(self, auth, type, logger=None): from sqlalchemy.orm import eagerload from stackone.model.services import Task from stackone.viewModel.TaskCreator import TaskCreator tc = TaskCreator() boot_time = self.get_boot_time() msg = {Task.STARTED:' is not completed in '+str(boot_time)+ 'seconds',\ Task.FAILED:' failed.',Task.CANCELED:' canceled.',Task.SUCCEEDED:' succeeded.',\ } if not logger: logger = LOGGER result_flags = {} logger.info('Submitting ' + str(type) + ' Sync task for ' + self.hostname) nw_task = tc.server_sync_task(auth,self.id,type,True) task_ids = [nw_task] result_flags['flag'+str(nw_task)] = Task.STARTED result = False for i in range(0, boot_time): time.sleep(3) transaction.begin() tasks = DBSession.query(Task).filter(Task.task_id.in_(task_ids)).options(eagerload('result')).all() for task in tasks: if task.is_finished(): result_flags['flag'+str(task.task_id)] = task.result[0].status if task.result[0].status == Task.SUCCEEDED: result = True task_ids.remove(task.task_id) if len(task_ids) == 0: transaction.commit() break transaction.commit() nw_msg = str(type) + ' syncing task(id:' + str(nw_task) + ') for ' + self.hostname + msg[result_flags['flag'+ str(nw_task)]] logger.info(nw_msg) return result