def job(self, joborder, basedir, use_container=True): inputs = joborder['inputs'] Draft4Validator(self.tool['inputs']).validate(inputs) adapter = self.tool["adapter"] adapters = [{"order": [-1000000], "schema": tool_schema_doc["properties"]["adapter"]["properties"]["baseCmd"], "value": adapter['baseCmd'], "$ref_base_url": "file:"+toolpath }] if "args" in adapter: for i, a in enumerate(adapter["args"]): a = copy.copy(a) if "order" in a: a["order"] = [a["order"]] else: a["order"] = [0] a["schema"] = tool_schema_doc["definitions"]["strOrExpr"] adapters.append(a) adapters.extend(adapt_inputs(self.tool['inputs'], inputs, inputs, "")) adapters.sort(key=lambda a: a["order"]) referenced_files = filter(lambda a: a is not None, flatten(map(lambda a: find_files(a, joborder), adapters))) j = Job() j.tool = self j.container = None if 'stdin' in adapter: j.stdin = flatten(adapt({"value": adapter['stdin'], "schema": tool_schema_doc["properties"]["adapter"]["properties"]["stdin"], "$ref_base_url": "file:"+toolpath }, joborder, None))[0] referenced_files.append(j.stdin) else: j.stdin = None if 'stdout' in adapter: j.stdout = flatten(adapt({"value": adapter['stdout'], "schema": tool_schema_doc["properties"]["adapter"]["properties"]["stdout"], "$ref_base_url": "file:"+toolpath }, joborder, None))[0] if os.path.isabs(j.stdout): raise Exception("stdout must be a relative path") else: j.stdout = None d = None a = self.tool.get("requirements") if a: b = a.get("environment") if b: c = b.get("container") if use_container and c: if c.get("type") == "docker": d = DockerPathMapper(referenced_files, basedir) j.container = c if d is None: d = PathMapper(referenced_files, basedir) if j.stdin: j.stdin = j.stdin if os.path.isabs(j.stdin) else os.path.join(basedir, j.stdin) j.command_line = flatten(map(lambda a: adapt(a, joborder, d.mapper), adapters)) j.pathmapper = d return j