def run_cwltool(ctx, path, job_path, **kwds): """Translate planemo kwds to cwltool kwds and run cwltool main function.""" ensure_cwltool_available() args = [] conformance_test = kwds.get("conformance_test", False) if conformance_test: args.append("--conformance-test") if ctx.verbose: args.append("--verbose") output_directory = kwds.get("output_directory", None) if output_directory: args.append("--outdir") args.append(output_directory) if kwds.get("no_container", False): args.append("--no-container") args.extend([path, job_path]) ctx.vlog("Calling cwltool with arguments %s" % args) with tempfile.NamedTemporaryFile() as tmp_stdout, \ tempfile.NamedTemporaryFile() as tmp_stderr: # cwltool passes sys.stderr to subprocess.Popen - ensure it has # and actual fileno. with real_io(): ret_code = main.main( args, stdout=tmp_stdout, stderr=tmp_stderr ) tmp_stdout.flush() tmp_stderr.flush() with open(tmp_stderr.name, "r") as stderr_f: log = stderr_f.read() ctx.vlog("cwltool log output [%s]" % log) with open(tmp_stdout.name, "r") as stdout_f: try: result = json.load(stdout_f) except ValueError: message = JSON_PARSE_ERROR_MESSAGE % ( open(tmp_stdout.name, "r").read(), tmp_stdout.name, log ) error(message) raise Exception(message) if ret_code != 0: return ErrorRunResponse("Error running cwltool", log=log) if conformance_test: cwl_command_state = result outputs = None else: cwl_command_state = None outputs = result return CwlToolRunResponse( log, cwl_command_state=cwl_command_state, outputs=outputs, )
def run_cwltool(ctx, path, job_path, **kwds): """Translate planemo kwds to cwltool kwds and run cwltool main function.""" ensure_cwltool_available() args = [] if ctx.verbose: args.append("--verbose") output_directory = kwds.get("output_directory", None) if output_directory: args.append("--outdir") args.append(output_directory) if kwds.get("no_container", False): args.append("--no-container") ensure_dependency_resolvers_conf_configured(ctx, kwds) args.append("--beta-dependency-resolvers-configuration") args.append(kwds["dependency_resolvers_config_file"]) if kwds.get("mulled_containers"): args.append("--beta-use-biocontainers") if kwds.get("non_strict_cwl", False): args.append("--non-strict") args.extend([path, job_path]) ctx.vlog("Calling cwltool with arguments %s" % args) with tempfile.NamedTemporaryFile("w") as tmp_stdout, \ tempfile.NamedTemporaryFile("w") as tmp_stderr: # cwltool passes sys.stderr to subprocess.Popen - ensure it has # and actual fileno. with real_io(): ret_code = main.main( args, stdout=tmp_stdout, stderr=tmp_stderr, ) tmp_stdout.flush() tmp_stderr.flush() with open(tmp_stderr.name, "r") as stderr_f: log = stderr_f.read() ctx.vlog("cwltool log output [%s]" % log) with open(tmp_stdout.name, "r") as stdout_f: try: result = json.load(stdout_f) except ValueError: message = JSON_PARSE_ERROR_MESSAGE % ( open(tmp_stdout.name, "r").read(), tmp_stdout.name, log ) error(message) raise Exception(message) if ret_code != 0: return ErrorRunResponse("Error running cwltool", log=log) outputs = result return CwlToolRunResponse( log, outputs=outputs, )