def cleanup_missing_tasks(self): from tabulate import tabulate rows: [TaskRow] = self.get_lazy_db_connection().get_all_tasks() failed = [] for row in rows: if not os.path.exists(row.outputdir): failed.append((row.wid, row.outputdir)) continue try: _ = WorkflowManager.from_path_with_wid( row.outputdir, row.wid, readonly=True ) except Exception as e: failed.append((row.wid, row.outputdir)) if failed: Logger.warn(f"Removing the following tasks:\n" + tabulate(failed)) if "y" in str(input(f"Remove {len(failed)} tasks (Y / n)? ")).lower(): self.get_lazy_db_connection().remove_by_ids([r[0] for r in failed]) Logger.info("Cleaned up tasks") else: Logger.info("Skipping cleaning of tasks")
def from_wid(self, wid, readonly=False): self.readonly = readonly with self.with_cursor() as cursor: path = cursor.execute( "SELECT outputdir FROM tasks where wid=?", (wid,) ).fetchone() if not path: expanded_path = fully_qualify_filename(wid) if os.path.exists(expanded_path): return WorkflowManager.from_path_get_latest( expanded_path, readonly=readonly ) raise Exception(f"Couldn't find task with id='{wid}'") return WorkflowManager.from_path_with_wid(path[0], wid=wid, readonly=readonly)
def remove_task(self, task: Union[str, TaskRow], keep_output: bool): if isinstance(task, str): wid = task task = self.get_lazy_db_connection().get_by_wid(task) if task is None: raise Exception("Couldn't find workflow with ID = " + wid) tm = WorkflowManager.from_path_with_wid(task.outputdir, task.wid) tm.remove_exec_dir() tm.database.close() if not keep_output and os.path.exists(task.outputdir): Logger.info("Removing " + task.outputdir) rmtree(task.outputdir) else: Logger.info("Skipping output dir deletion, can't find: " + task.outputdir) self.get_lazy_db_connection().remove_by_id(task.wid) Logger.info("Deleted task: " + task.wid)