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
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
+import functools
+import json
import logging
import mock
-import unittest
import os
-import functools
-import json
+import unittest
+import arvados
import arvados_cwl
import cwltool.process
from schema_salad.ref_resolver import Loader
def test_run(self, mockcollection):
arvados_cwl.add_arv_hints()
- runner = arvados_cwl.ArvCwlRunner(mock.MagicMock())
+ api = mock.MagicMock()
+ api._rootDesc = arvados.api('v1')._rootDesc
+ runner = arvados_cwl.ArvCwlRunner(api)
+ self.assertEqual(runner.work_api, 'jobs')
runner.project_uuid = "zzzzz-8i9sb-zzzzzzzzzzzzzzz"
runner.ignore_docker_for_reuse = False
['script_version', 'in git', '9e5b98e8f5f4727856b53447191f9c06e3da2ba6'],
['docker_image_locator', 'in docker', 'arvados/jobs']],
find_or_create=True)
+
+ def test_default_work_api(self):
+ arvados_cwl.add_arv_hints()
+
+ api = mock.MagicMock()
+ api._rootDesc = arvados.api('v1')._rootDesc
+ del api._rootDesc.get('resources')['jobs']['methods']['create']
+ runner = arvados_cwl.ArvCwlRunner(api)
+ self.assertEqual(runner.work_api, 'containers')
+import functools
+import json
import logging
import mock
-import unittest
import os
-import functools
-import json
import StringIO
+import unittest
+import arvados
import arvados_cwl
class TestMakeOutput(unittest.TestCase):
+ def setUp(self):
+ self.api = mock.MagicMock()
+ self.api._rootDesc = arvados.api('v1')._rootDesc
+
@mock.patch("arvados.collection.Collection")
@mock.patch("arvados.collection.CollectionReader")
def test_make_output_collection(self, reader, col):
- api = mock.MagicMock()
keep_client = mock.MagicMock()
- runner = arvados_cwl.ArvCwlRunner(api, keep_client=keep_client)
+ runner = arvados_cwl.ArvCwlRunner(self.api, keep_client=keep_client)
runner.project_uuid = 'zzzzz-j7d0g-zzzzzzzzzzzzzzz'
final = mock.MagicMock()
c.fn = fnPattern % (pdh, os.path.basename(c.fn))
class TestPathmap(unittest.TestCase):
+ def setUp(self):
+ self.api = mock.MagicMock()
+ self.api._rootDesc = arvados.api('v1')._rootDesc
+
def test_keepref(self):
"""Test direct keep references."""
- arvrunner = arvados_cwl.ArvCwlRunner(mock.MagicMock())
+ arvrunner = arvados_cwl.ArvCwlRunner(self.api)
p = ArvPathMapper(arvrunner, [{
"class": "File",
def test_upload(self, upl):
"""Test pathmapper uploading files."""
- arvrunner = arvados_cwl.ArvCwlRunner(mock.MagicMock())
+ arvrunner = arvados_cwl.ArvCwlRunner(self.api)
upl.side_effect = upload_mock
def test_prev_uploaded(self, upl):
"""Test pathmapper handling previously uploaded files."""
- arvrunner = arvados_cwl.ArvCwlRunner(mock.MagicMock())
+ arvrunner = arvados_cwl.ArvCwlRunner(self.api)
arvrunner.add_uploaded('tests/hw.py', MapperEnt(resolved='keep:99999999999999999999999999999991+99/hw.py', target='', type='File'))
upl.side_effect = upload_mock
@mock.patch("arvados.commands.run.statfile")
def test_statfile(self, statfile, upl):
"""Test pathmapper handling ArvFile references."""
- arvrunner = arvados_cwl.ArvCwlRunner(mock.MagicMock())
+ arvrunner = arvados_cwl.ArvCwlRunner(self.api)
# An ArvFile object returned from arvados.commands.run.statfile means the file is located on a
# keep mount, so we can construct a direct reference directly without upload.
-import arvados
-import arvados.keep
-import arvados.collection
-import arvados_cwl
import copy
import cStringIO
import functools
import hashlib
+import json
+import logging
import mock
import sys
import unittest
-import json
-import logging
+
+import arvados
+import arvados.collection
+import arvados_cwl
+import arvados.keep
from .matcher import JsonDiffMatcher
stubs.api = mock.MagicMock()
+ stubs.api._rootDesc = arvados.api('v1')._rootDesc
stubs.api.users().current().execute.return_value = {
"uuid": stubs.fake_user_uuid,
}