def get_job_stats(request): # type: (PyramidRequest) -> AnyResponseType """ Retrieve the statistics of a job. """ job = get_job(request) raise_job_dismissed(job, request) if job.status not in JOB_STATUS_CATEGORIES[StatusCategory.FINISHED] or job.status != Status.SUCCEEDED: raise JobStatisticsNotFound(json={ "title": "NoJobStatistics", "type": "no-job-statistics", # unofficial "detail": "Job statistics are only available for completed and successful jobs.", "status": JobStatisticsNotFound.code, "cause": {"status": job.status}, }) stats = job.statistics if not stats: # backward compatibility for existing jobs before feature was added raise JobStatisticsNotFound(json={ "title": "NoJobStatistics", "type": "no-job-statistics", # unofficial "detail": "Job statistics were not collected for this execution.", "status": JobStatisticsNotFound.code, "cause": "Empty statistics." }) body = sd.JobStatisticsSchema().deserialize(stats) return HTTPOk(json=body)
def get_job_results(request): # type: (PyramidRequest) -> AnyResponseType """ Retrieve the results of a job. """ job = get_job(request) resp = get_job_results_response(job, request) return resp
def get_job_status(request): # type: (PyramidRequest) -> HTTPOk """ Retrieve the status of a job. """ job = get_job(request) job_status = job.json(request, self_link="status") return HTTPOk(json=job_status)
def get_job_exceptions(request): # type: (PyramidRequest) -> AnyResponseType """ Retrieve the exceptions of a job. """ job = get_job(request) raise_job_dismissed(job, request) exceptions = sd.JobExceptionsSchema().deserialize(job.exceptions) return HTTPOk(json=exceptions)
def get_job_outputs(request): # type: (PyramidRequest) -> AnyResponseType """ Retrieve the output values resulting from a job execution. """ job = get_job(request) raise_job_dismissed(job, request) raise_job_bad_status(job, request) schema = get_schema_query(request.params.get("schema")) results, _ = get_results(job, request, schema=schema, link_references=False) outputs = {"outputs": results} outputs.update({"links": job.links(request, self_link="outputs")}) outputs = sd.JobOutputsBody().deserialize(outputs) return HTTPOk(json=outputs)
def get_job_inputs(request): # type: (PyramidRequest) -> AnyResponseType """ Retrieve the inputs values and outputs definitions of a job. """ job = get_job(request) schema = get_schema_query(request.params.get("schema"), strict=False) job_inputs = job.inputs job_outputs = job.outputs if schema: job_inputs = convert_input_values_schema(job_inputs, schema) job_outputs = convert_output_params_schema(job_outputs, schema) body = {"inputs": job_inputs, "outputs": job_outputs} body.update({"links": job.links(request, self_link="inputs")}) body = sd.JobInputsBody().deserialize(body) return HTTPOk(json=body)
def get_job_logs(request): # type: (PyramidRequest) -> AnyResponseType """ Retrieve the logs of a job. """ job = get_job(request) raise_job_dismissed(job, request) logs = sd.JobLogsSchema().deserialize(job.logs) ctype = guess_target_format(request) if ctype == ContentType.TEXT_PLAIN: ctype = add_content_type_charset(ctype, charset="UTF-8") return HTTPOk(body="\n".join(logs), content_type=ctype) if ctype in set(ContentType.ANY_XML) | {ContentType.APP_YAML}: data = OutputFormat.convert(logs, ctype, item_root="logs") ctype = add_content_type_charset(ctype, charset="UTF-8") return HTTPOk(body=data, content_type=ctype) return HTTPOk(json=logs)
def cancel_job(request): # type: (PyramidRequest) -> AnyResponseType """ Dismiss a planned or running job execution, or remove result artifacts of a completed job. Note: Will only stop tracking this particular process execution when not supported by underlying provider services such as WPS 1.0. Services supporting cancel operation could attempt to terminate remote jobs. """ job = get_job(request) job = dismiss_job_task(job, request) return HTTPOk(json={ "jobID": str(job.id), "status": job.status, "message": job.status_message, "percentCompleted": job.progress, })