def can_run(self): """Determines if task can actually run This method first verifies the `MakeBlastDBTask` and `DataImportTask` task have `D3RTask.COMPLETE_STATUS` for status. The method then verifies a `BlastNFilterTask` does not already exist. If above is not true then self.set_error() is set with information about the issue :return: True if can run otherwise False """ self._can_run = False self._error = None # check blast make_blastdb = MakeBlastDBTask(self._path, self._args) make_blastdb.update_status_from_filesystem() if make_blastdb.get_status() != D3RTask.COMPLETE_STATUS: logger.info('Cannot run ' + self.get_name() + ' task ' + 'because ' + make_blastdb.get_name() + ' task' + 'has a status of ' + make_blastdb.get_status()) self.set_error(make_blastdb.get_name() + ' task has ' + make_blastdb.get_status() + ' status') return False # check data import data_import = DataImportTask(self._path, self._args) data_import.update_status_from_filesystem() if data_import.get_status() != D3RTask.COMPLETE_STATUS: logger.info('Cannot run ' + self.get_name() + ' task ' + 'because ' + data_import.get_name() + ' task' + 'has a status of ' + data_import.get_status()) self.set_error(data_import.get_name() + ' task has ' + data_import.get_status() + ' status') return False # check blast is not complete and does not exist self.update_status_from_filesystem() if self.get_status() == D3RTask.COMPLETE_STATUS: logger.debug("No work needed for " + self.get_name() + " task") return False if self.get_status() != D3RTask.NOTFOUND_STATUS: logger.warning(self.get_name() + " task was already " + "attempted, but there was a problem") self.set_error(self.get_dir_name() + ' already exists and ' + 'status is ' + self.get_status()) return False self._can_run = True return True
def test_constructor(self): params = D3RParameters() task = MakeBlastDBTask('/foo', params) self.assertEqual(task.get_name(), 'makeblastdb') self.assertEqual(task.get_stage(), 1) self.assertEqual(task.get_status(), D3RTask.UNKNOWN_STATUS) self.assertEqual(task.get_path(), '/foo') self.assertEqual(task.get_dir_name(), 'stage.1.makeblastdb') test_task.try_update_status_from_filesystem(self, task)