def put_job(job_uuid): """ Update job status. Secured via apache config: production/imads.conf. request['job_status'] str: value from customjob.JobStatus properties :param job_uuid: str: uuid of the job we want to update status :return: json response """ db = get_db() (job_status,) = get_required_json_props(request, ["job_status"]) error_message = request.get_json().get("error_message") if job_status == JobStatus.RUNNING: CustomJob.set_job_running(db, job_uuid) elif job_status == JobStatus.COMPLETE: CustomJob.set_job_complete(db, job_uuid) elif job_status == JobStatus.ERROR: CustomJob.set_job_as_error(db, job_uuid, error_message) else: raise ValueError("Invalid job status:{} for job:{}".format(job_status, job_uuid)) return json_ok_result()
def put_job(job_uuid): """ Update job status. Secured via apache config: production/tfpredictions.conf. request['job_status'] str: value from customjob.JobStatus properties :param job_uuid: str: uuid of the job we want to update status :return: json response """ db = get_db() (job_status, ) = get_required_json_props(request, ["job_status"]) error_message = request.get_json().get("error_message") if job_status == JobStatus.RUNNING: CustomJob.set_job_running(db, job_uuid) elif job_status == JobStatus.COMPLETE: CustomJob.set_job_complete(db, job_uuid) elif job_status == JobStatus.ERROR: CustomJob.set_job_as_error(db, job_uuid, error_message) else: raise ValueError("Invalid job status:{} for job:{}".format( job_status, job_uuid)) return json_ok_result()
def test_customjob(self): FASTA_DATA1 = """>stuff\nAAACCCGGGGTT""" db = create_db_connection(TestWithPostgres.config.dbconfig) update_database(db, """ delete from custom_result_row; delete from custom_result; delete from job; delete from sequence_list_item; delete from sequence_list; """, []) # start out finding no jobs jobs = CustomJob.find_jobs(db, None) self.assertEqual(len(jobs), 0) # create a new job that should be NEW status sequence_list = SequenceList.create_with_content_and_title(db, FASTA_DATA1, "somelist") job_uuid = CustomJob.create_job(db, DataType.PREDICTION, sequence_list, model_name="E2f1").uuid job = CustomJob.read_job(db, job_uuid) self.assertEqual(job_uuid, job.uuid) self.assertEqual(JobStatus.NEW, job.status) self.assertEqual(DataType.PREDICTION, job.type) self.assertEqual(sequence_list, job.sequence_list) self.assertIsNotNone(job.created) self.assertIsNone(job.finished) # find NEW job without filters jobs = CustomJob.find_jobs(db, None) self.assertEqual(len(jobs), 1) self.assertEqual(jobs[0].uuid, job_uuid) # find no for RUNNING jobs jobs = CustomJob.find_jobs(db, JobStatus.RUNNING) self.assertEqual(len(jobs), 0) # find 1 for NEW jobs jobs = CustomJob.find_jobs(db, JobStatus.NEW) self.assertEqual(len(jobs), 1) # Jobs can be set to running only once (when in NEW state) CustomJob.set_job_running(db, job_uuid) job = CustomJob.read_job(db, job_uuid) self.assertEqual(JobStatus.RUNNING, job.status) self.assertIsNone(job.finished) # Disallow setting a job running twice (prevents two workers working on the same job) with self.assertRaises(ValueError): CustomJob.set_job_running(db, job_uuid) # find 0 for NEW jobs jobs = CustomJob.find_jobs(db, JobStatus.NEW) self.assertEqual(len(jobs), 0) # Jobs can be set to complete from RUNNING state CustomJob.set_job_complete(db, job_uuid) job = CustomJob.read_job(db, job_uuid) self.assertEqual(JobStatus.COMPLETE, job.status) self.assertIsNotNone(job.finished) # find 0 for NEW jobs jobs = CustomJob.find_jobs(db, JobStatus.NEW) self.assertEqual(len(jobs), 0) # Jobs can be set to complete from ERROR state CustomJob.set_job_as_error(db, job_uuid, "Something failed.") job = CustomJob.read_job(db, job_uuid) self.assertEqual(JobStatus.ERROR, job.status) self.assertEqual("Something failed.", job.error_msg) self.assertIsNotNone(job.finished) # find 0 for NEW jobs jobs = CustomJob.find_jobs(db, JobStatus.NEW) self.assertEqual(len(jobs), 0)
def test_customjob(self): FASTA_DATA1 = """>stuff\nAAACCCGGGGTT""" db = create_db_connection(TestWithPostgres.config.dbconfig) update_database(db, """ delete from custom_result_row; delete from custom_result; delete from job; delete from sequence_list_item; delete from sequence_list; """, []) # start out finding no jobs jobs = CustomJob.find_jobs(db, None) self.assertEqual(len(jobs), 0) # create a new job that should be NEW status sequence_list = SequenceList.create_with_content_and_title(db, FASTA_DATA1, "somelist") job_uuid = CustomJob.create_job(db, DataType.PREDICTION, sequence_list, model_name="E2f1").uuid job = CustomJob.read_job(db, job_uuid) self.assertEqual(job_uuid, job.uuid) self.assertEqual(JobStatus.NEW, job.status) self.assertEqual(DataType.PREDICTION, job.type) self.assertEqual(sequence_list, job.sequence_list) self.assertIsNotNone(job.created) self.assertIsNone(job.finished) # find NEW job without filters jobs = CustomJob.find_jobs(db, None) self.assertEqual(len(jobs), 1) self.assertEqual(jobs[0].uuid, job_uuid) # find no for RUNNING jobs jobs = CustomJob.find_jobs(db, JobStatus.RUNNING) self.assertEqual(len(jobs), 0) # find 1 for NEW jobs jobs = CustomJob.find_jobs(db, JobStatus.NEW) self.assertEqual(len(jobs), 1) # Jobs can be set to running only once (when in NEW state) CustomJob.set_job_running(db, job_uuid) job = CustomJob.read_job(db, job_uuid) self.assertEqual(JobStatus.RUNNING, job.status) self.assertIsNone(job.finished) # Disallow setting a job running twice (prevents two workers working on the same job) with self.assertRaises(ValueError): CustomJob.set_job_running(db, job_uuid) # find 0 for NEW jobs jobs = CustomJob.find_jobs(db, JobStatus.NEW) self.assertEqual(len(jobs), 0) # Jobs can be set to complete from RUNNING state CustomJob.set_job_complete(db, job_uuid) job = CustomJob.read_job(db, job_uuid) self.assertEqual(JobStatus.COMPLETE, job.status) self.assertIsNotNone(job.finished) # find 0 for NEW jobs jobs = CustomJob.find_jobs(db, JobStatus.NEW) self.assertEqual(len(jobs), 0) # Jobs can be set to complete from ERROR state CustomJob.set_job_as_error(db, job_uuid, "Something failed.") job = CustomJob.read_job(db, job_uuid) self.assertEqual(JobStatus.ERROR, job.status) self.assertEqual("Something failed.", job.error_msg) self.assertIsNotNone(job.finished) # find 0 for NEW jobs jobs = CustomJob.find_jobs(db, JobStatus.NEW) self.assertEqual(len(jobs), 0)