X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/24bcfa0b87b87e4510fffe8a961a5d4a9fd34948..6bf3b279cd2d5ea5c1d6b849265b7206461467b8:/sdk/cwl/arvados_cwl/__init__.py diff --git a/sdk/cwl/arvados_cwl/__init__.py b/sdk/cwl/arvados_cwl/__init__.py index c90f890268..f5f326bde1 100644 --- a/sdk/cwl/arvados_cwl/__init__.py +++ b/sdk/cwl/arvados_cwl/__init__.py @@ -24,7 +24,7 @@ import arvados.config from .arvcontainer import ArvadosContainer, RunnerContainer from .arvjob import ArvadosJob, RunnerJob, RunnerTemplate -from. runner import Runner +from. runner import Runner, upload_instance from .arvtool import ArvadosCommandTool from .arvworkflow import ArvadosWorkflow, upload_workflow from .fsaccess import CollectionFsAccess @@ -58,23 +58,32 @@ class ArvCwlRunner(object): self.uploaded = {} self.num_retries = 4 self.uuid = None - self.work_api = work_api self.stop_polling = threading.Event() self.poll_api = None self.pipeline = None self.final_output_collection = None self.output_name = output_name + self.project_uuid = None + if keep_client is not None: self.keep_client = keep_client else: self.keep_client = arvados.keep.KeepClient(api_client=self.api, num_retries=self.num_retries) - if self.work_api is None: - # todo: autodetect API to use. - self.work_api = "jobs" - - if self.work_api not in ("containers", "jobs"): - raise Exception("Unsupported API '%s'" % self.work_api) + for api in ["jobs", "containers"]: + try: + methods = self.api._rootDesc.get('resources')[api]['methods'] + if ('httpMethod' in methods['create'] and + (work_api == api or work_api is None)): + self.work_api = api + break + except KeyError: + pass + if not self.work_api: + if work_api is None: + raise Exception("No supported APIs") + else: + raise Exception("Unsupported API '%s'" % work_api) def arv_make_tool(self, toolpath_object, **kwargs): kwargs["work_api"] = self.work_api @@ -266,6 +275,8 @@ class ArvCwlRunner(object): kwargs["docker_outdir"] = "$(task.outdir)" kwargs["tmpdir"] = "$(task.tmpdir)" + upload_instance(self, shortname(tool.tool["id"]), tool, job_order) + runnerjob = None if kwargs.get("submit"): if self.work_api == "containers": @@ -289,7 +300,7 @@ class ArvCwlRunner(object): logger.info("Pipeline instance %s", self.pipeline["uuid"]) if runnerjob and not kwargs.get("wait"): - runnerjob.run() + runnerjob.run(wait=kwargs.get("wait")) return runnerjob.uuid self.poll_api = arvados.api('v1')