def wait_for_async_task(task, delay=1): if not isinstance(task, AsyncTask): task = AsyncTask(task) while task.is_running(): time.sleep(delay) task.update() return task.get_hashes()
def run_async_task_with_status(task, progress_bar, delay=1): if not isinstance(task, AsyncTask): task = AsyncTask(task) while task.is_running(): time.sleep(delay) task.update() progress_bar.update_progress(task.get_progress()) progress_bar.done() return task.get_hashes()
def run(self): orgName = self.get_option('org') prodName = self.get_option('name') prodLabel = self.get_option('label') prodId = self.get_option('id') prod = get_product(orgName, prodName, prodLabel, prodId) task = AsyncTask(self.api.sync(orgName, prod["id"])) run_async_task_with_status(task, ProgressBar()) if task.failed(): errors = [t["result"]['errors'][0] for t in task.get_hashes() if t['state'] == 'error' and isinstance(t["result"], dict) and "errors" in t["result"]] print _("Product [ %(prod_name)s ] failed to sync: %(errors)s" \ % {'prod_name':prod["name"], 'errors':errors}) return os.EX_DATAERR elif task.cancelled(): print _("Product [ %s ] synchronization canceled" % prod["name"]) return os.EX_DATAERR print _("Product [ %s ] synchronized" % prod["name"]) return os.EX_OK