Merge pull request #7167 from mvdbeek/verify_tool_improvements

Remote tool testing enhancements
This commit is contained in:
Martin Cech
2019-01-09 13:43:33 -05:00
committed by GitHub
2 changed files with 51 additions and 12 deletions
+38 -12
View File
@@ -12,6 +12,7 @@ from collections import OrderedDict
from json import dumps
from logging import getLogger
from packaging.version import parse as parse_version, Version
try:
from nose.tools import nottest
except ImportError:
@@ -98,9 +99,20 @@ class GalaxyInteractorApi(object):
if kwds.get('user_api_key_is_admin_key', False):
self.master_api_key = self.api_key
self.keep_outputs_dir = kwds["keep_outputs_dir"]
self._target_galaxy_version = None
self.uploads = {}
@property
def target_galaxy_version(self):
if self._target_galaxy_version is None:
self._target_galaxy_version = parse_version(self._get('version').json()['version_major'])
return self._target_galaxy_version
@property
def supports_test_data_download(self):
return self.target_galaxy_version >= Version("19.01")
def __get_user_key(self, user_key, admin_key, test_user=None):
if not test_user:
test_user = "test@bx.psu.edu"
@@ -259,16 +271,29 @@ class GalaxyInteractorApi(object):
@nottest
def test_data_download(self, tool_id, filename, mode='file'):
response = self._get("tools/%s/test_data_download?filename=%s" % (tool_id, filename), admin=True)
assert response.status_code == 200
if mode == 'file':
return response.content
elif mode == 'directory':
prefix = os.path.basename(filename)
path = tempfile.mkdtemp(prefix=prefix)
with tarfile.open(fileobj=BytesIO(response.content)) as tar_contents:
tar_contents.extractall(path=path)
return path
if self.supports_test_data_download:
response = self._get("tools/%s/test_data_download?filename=%s" % (tool_id, filename), admin=True)
assert response.status_code == 200
if mode == 'file':
return response.content
elif mode == 'directory':
prefix = os.path.basename(filename)
path = tempfile.mkdtemp(prefix=prefix)
with tarfile.open(fileobj=BytesIO(response.content)) as tar_contents:
tar_contents.extractall(path=path)
return path
else:
# We can only use local data
response = self._get("tools/%s/test_data_path?filename=%s" % (tool_id, filename), admin=True)
assert response.status_code == 200
file_name = response.json()
if mode == 'file':
return open(file_name, mode='rb')
elif mode == 'directory':
# Make a copy, since we are going to clean up the returned path
path = tempfile.mkdtemp()
shutil.copytree(file_name, path)
return path
def __output_id(self, output_data):
# Allow data structure coming out of tools API - {id: <id>, output_name: <name>, etc...}
@@ -677,7 +702,7 @@ def _verify_extra_files_content(extra_files, hda_id, dataset_fetcher, test_data_
shutil.rmtree(path)
def verify_tool(tool_id, galaxy_interactor, resource_parameters=None, register_job_data=None, test_index=0, tool_version=None, quiet=False):
def verify_tool(tool_id, galaxy_interactor, resource_parameters=None, register_job_data=None, test_index=0, tool_version=None, quiet=False, test_history=None):
if resource_parameters is None:
resource_parameters = {}
tool_test_dicts = galaxy_interactor.get_tool_tests(tool_id, tool_version=tool_version)
@@ -686,7 +711,8 @@ def verify_tool(tool_id, galaxy_interactor, resource_parameters=None, register_j
_handle_def_errors(testdef)
test_history = galaxy_interactor.new_history()
if test_history is None:
test_history = galaxy_interactor.new_history()
stage_data_in_history(galaxy_interactor, tool_id, testdef.test_data(), test_history)
+13
View File
@@ -0,0 +1,13 @@
# Test galaxy interactor
from packaging.version import Version
from base import api # noqa: I100,I202
class GalaxyInteractorBackwardCompatTestCase(api.ApiTestCase):
def test_local_test_data_download(self):
self.galaxy_interactor._target_galaxy_version = Version("18.09")
assert self.galaxy_interactor.supports_test_data_download is False
assert self.galaxy_interactor.test_data_download(tool_id='cat1', filename='1.bed').readline().startswith('chr1\t147962192\t147962580')