Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/planemo/cwl/toil.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
| author | guerler |
|---|---|
| date | Fri, 31 Jul 2020 00:32:28 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:d30785e31577 | 1:56ad4e20f292 |
|---|---|
| 1 from __future__ import absolute_import | |
| 2 | |
| 3 import json | |
| 4 import tempfile | |
| 5 | |
| 6 try: | |
| 7 from toil.cwl import cwltoil | |
| 8 except ImportError: | |
| 9 cwltoil = None | |
| 10 | |
| 11 from planemo.deps import ensure_dependency_resolvers_conf_configured | |
| 12 from planemo.io import error, real_io | |
| 13 from planemo.runnable import ( | |
| 14 ErrorRunResponse, | |
| 15 ) | |
| 16 from .run import ( | |
| 17 CwlToolRunResponse, | |
| 18 JSON_PARSE_ERROR_MESSAGE | |
| 19 ) | |
| 20 | |
| 21 | |
| 22 TOIL_REQUIRED_MESSAGE = "This functionality requires Toil, please install with 'pip install toil'" | |
| 23 | |
| 24 | |
| 25 def run_toil(ctx, path, job_path, **kwds): | |
| 26 """Translate planemo kwds to cwltool kwds and run cwltool main function.""" | |
| 27 _ensure_toil_available() | |
| 28 | |
| 29 args = [] | |
| 30 if not ctx.verbose: | |
| 31 args.append("--quiet") | |
| 32 output_directory = kwds.get("output_directory", None) | |
| 33 if output_directory: | |
| 34 args.append("--outdir") | |
| 35 args.append(output_directory) | |
| 36 if kwds.get("no_container", False): | |
| 37 args.append("--no-container") | |
| 38 ensure_dependency_resolvers_conf_configured(ctx, kwds) | |
| 39 args.append("--beta-dependency-resolvers-configuration") | |
| 40 args.append(kwds["dependency_resolvers_config_file"]) | |
| 41 if kwds.get("mulled_containers"): | |
| 42 args.append("--beta-use-biocontainers") | |
| 43 | |
| 44 if kwds.get("non_strict_cwl", False): | |
| 45 args.append("--non-strict") | |
| 46 | |
| 47 args.extend([path, job_path]) | |
| 48 ctx.vlog("Calling cwltoil with arguments %s" % args) | |
| 49 with tempfile.NamedTemporaryFile("w") as tmp_stdout: | |
| 50 # cwltool passes sys.stderr to subprocess.Popen - ensure it has | |
| 51 # and actual fileno. | |
| 52 with real_io(): | |
| 53 ret_code = cwltoil.main( | |
| 54 args, | |
| 55 stdout=tmp_stdout | |
| 56 ) | |
| 57 tmp_stdout.flush() | |
| 58 with open(tmp_stdout.name, "r") as stdout_f: | |
| 59 try: | |
| 60 result = json.load(stdout_f) | |
| 61 except ValueError: | |
| 62 message = JSON_PARSE_ERROR_MESSAGE % ( | |
| 63 open(tmp_stdout.name, "r").read(), | |
| 64 tmp_stdout.name, | |
| 65 ) | |
| 66 error(message) | |
| 67 raise Exception(message) | |
| 68 | |
| 69 if ret_code != 0: | |
| 70 return ErrorRunResponse("Error running Toil") | |
| 71 outputs = result | |
| 72 return CwlToolRunResponse( | |
| 73 "", | |
| 74 outputs=outputs, | |
| 75 ) | |
| 76 | |
| 77 | |
| 78 def _ensure_toil_available(): | |
| 79 if cwltoil is None: | |
| 80 raise Exception(TOIL_REQUIRED_MESSAGE) |
