def test_format_job_with_no_start_date(self): time = '2017-10-27T18:04:47Z' job = {'id': '12345', 'name': 'TestJob', 'status': 'Failed'} formatted_time = datetime.strptime(time, '%Y-%m-%dT%H:%M:%SZ') result = QueryJobsResult(id=job.get('id'), name=job.get('name'), status=job.get('status'), submission=formatted_time, extensions=ExtendedFields()) self.assertEqual(jobs_controller.format_job(job, formatted_time), result)
def test_format_job_with_no_start_date(self): time = '2017-10-27T18:04:47Z' job = {'id': '12345', 'name': 'TestJob', 'status': 'Failed'} formatted_time = dateutil.parser.parse(time).astimezone(tzutc()) result = QueryJobsResult(id=job.get('id'), name=job.get('name'), status=job.get('status'), start=formatted_time, submission=formatted_time, extensions=ExtendedFields()) self.assertEqual(jobs_controller.format_job(job, formatted_time), result)
def _query_jobs_result(job, project_id=None): return QueryJobsResult( id=job_ids.dsub_to_api(project_id, job['job-id'], job.get('task-id')), name=job['job-name'], status=job_statuses.dsub_to_api(job), # The LocalJobProvider returns create-time with millisecond granularity. # For consistency with the GoogleJobProvider, truncate to second # granularity. submission=job['create-time'].replace(microsecond=0), start=job.get('start-time'), end=job['end-time'], labels=labels.dsub_to_api(job), extensions=extensions.get_extensions(job))
def format_job(job, now): start = _parse_datetime(job.get('start')) or now submission = _parse_datetime(job.get('submission')) if submission is None: # Submission is required by the common jobs API. Submission may be missing # for subworkflows in which case we fallback to the workflow start time # or, if not started, the current time. This fallback logic may be # removed if/when Cromwell changes behavior per https://github.com/broadinstitute/cromwell/issues/2968. submission = start end = _parse_datetime(job.get('end')) return QueryJobsResult( id=job.get('id'), name=job.get('name'), status=job_statuses.cromwell_workflow_status_to_api(job.get('status')), submission=submission, start=start, end=end, labels=job.get('labels'), extensions=ExtendedFields(parent_job_id=job.get('parentWorkflowId')))
def format_job(job, now): start = _parse_datetime(job.get('start')) submission = start if submission is None: # Submission is required by the common jobs API. Submission is not # currently returned via Cromwell QueryJobs, so start is used as a # stand-in value. If the job hasn't actually started yet, fake the # submission time as 'now' rather than returning null. Switch to true # submission time if/when supported by Cromwell: https://github.com/broadinstitute/cromwell/issues/3167. submission = now end = _parse_datetime(job.get('end')) return QueryJobsResult( id=job.get('id'), name=job.get('name'), status=job.get('status'), submission=submission, start=start, end=end, labels=job.get('labels'), extensions=ExtendedFields(parent_job_id=job.get('parentWorkflowId')))